第 1 題 【 問答題 】
? 紅與黑
有一間長方形的房子, 地上鋪了紅色、 黑色兩種顏色的正方形瓷磚。你站在其中一塊黑色的瓷磚上, 只能向相鄰的黑色瓷磚移動。 請寫一個程序, 計算你總共能夠到達多少塊黑色的瓷磚。
時間限制: 1000
內存限制: 65536
輸入
包括多個數據集合。 每個數據集合的第一行是兩個整數 W 和 H, 分別表示 x 方向和 y 方向瓷磚的數量。 W 和 H 都不超過 20。 在接下來的 H 行中, 每行包括 W 個字符。 每個字符表示一塊瓷磚的顏色, 規則如下
1)‘.’: 黑色的瓷磚;
2)‘#’: 白色的瓷磚;
3)‘@’: 黑色的瓷磚, 并且你站在這塊瓷磚上。 該字符在每個數據集合中唯一出現一次。 當在一行中讀入的是兩個零時, 表示輸入結束。
輸出
對每個數據集合, 分別輸出一行, 顯示你從初始位置出發能到達的瓷磚數(記數時包括初始位置的瓷磚)。
樣例輸入
6 9
…#.
…#
…
…
…
…
…
#@…#
.#…#.
0 0
樣例輸出
45
第 2 題 【 問答題 】
? 迷宮問題
定義一個二維數組:
int maze[5][5] = {
0, 1, 0, 0, 0,
0, 1, 0, 1, 0,
0, 0, 0, 0, 0,
0, 1, 1, 1, 0,
0, 0, 0, 1, 0,
};
它表示一個迷宮, 其中的 1 表示墻壁, 0 表示可以走的路, 只能橫著走或豎著走, 不能斜著走, 要求編程序找出從左上角到右下角的最短路線。
時間限制: 1000
內存限制: 65536
輸入
一個 5 × 5 的二維數組, 表示一個迷宮。 數據保證有唯一解。
輸出
左上角到右下角的最短路徑, 格式如樣例所示。
樣例輸入
0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0
樣例輸出
(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4)
?
第 3 題 【 問答題 】
? 二叉樹的深度
給定一棵二叉樹, 求該二叉樹的深度
二叉樹深度定義: 從根結點到葉結點依次經過的結點(含根、葉結點)
形成樹的一條路徑, 最長路徑的節點個數為樹的深度
時間限制: 1000
內存限制: 65535
輸入
第一行是一個整數 n, 表示二叉樹的結點個數。 二叉樹結點編號從 1到 n, 根結點為 1, n <= 10 接下來有 n 行, 依次對應二叉樹的 n 個節點。 每行有兩個整數, 分別表示該節點的左兒子和右兒子的節點編號。 如果第一個(第二個) 數為-1 則表示沒有左(右) 兒子
輸出
輸出一個整型數, 表示樹的深度
樣例輸入
3
2 3
-1 -1
-1 -1
樣例輸出
2
?
第 4 題 【 問答題 】
? 表達式· 表達式樹· 表達式求值
眾所周知, 任何一個表達式, 都可以用一棵表達式樹來表示。 例如,
表達式 a+b*c, 可以表示為如下的表達式樹:
+
/
a *
/
b c
現在, 給你一個中綴表達式, 這個中綴表達式用變量來表示(不含數字), 請你將這個中綴表達式用表達式二叉樹的形式輸出出來。
時間限制: 1000
內存限制: 65535
輸入
輸入分為三個部分。 第一部分為一行, 即中綴表達式(長度不大于 50)。
中綴表達式可能含有小寫字母代表變量(a-z), 也可能含有運算符(+、-、 *、 /、 小括號), 不含有數字, 也不含有空格。 第二部分為一個整數 n(n < 10), 表示中綴表達式的變量數。 第三部分有 n 行, 每行格式為 C x, C 為變量的字符, x 為該變量的值。
輸出
輸出分為三個部分, 第一個部分為該表達式的逆波蘭式, 即該表達式樹的后根遍歷結果。 占一行。 第二部分為表達式樹的顯示, 如樣例輸出所示。 如果該二叉樹是一棵滿二叉樹, 則最底部的葉子結點, 分別占據橫坐標的第 1、 3、 5、 7……個位置(最左邊的坐標是 1), 然后它們的父結點的橫坐標, 在兩個子結點的中間。 如果不是滿二叉樹,則沒有結點的地方, 用空格填充(但請略去所有的行末空格)。 每一行父結點與子結點中隔開一行, 用斜杠(/) 與反斜杠() 來表示樹的關系。 /出現的橫坐標位置為父結點的橫坐標偏左一格, \出現的橫坐標位置為父結點的橫坐標偏右一格。 也就是說, 如果樹高為 m, 則輸出就有 2m-1 行。 第三部分為一個整數, 表示將值代入變量之后,該中綴表達式的值。 需要注意的一點是, 除法代表整除運算, 即舍棄小數點后的部分。 同時, 測試數據保證不會出現除以 0 的現象。
樣例輸入
a+bc
3
a 2
b 7
c 5
樣例輸出
abc+
+
/
a *
/
b c
37
?