description:
有一間長方形的房子,地上鋪了紅色、黑色兩種顏色的正方形瓷磚。你站在其中一塊黑色的瓷磚上,只能向相鄰的黑色瓷磚移動。請寫乙個程式,計算你總共能夠到達多少塊黑色的瓷磚。
input:
包括多個資料集合。每個資料集合的第一行是兩個整數w和h,分別表示x方向和y方向瓷磚的數量。w和h都不超過20。在接下來的h行中,每行包括w個字元。每個字元表示一塊瓷磚的顏色,規則如下
1)『.』:黑色的瓷磚;
2)『#』:白色的瓷磚;
3)『@』:黑色的瓷磚,並且你站在這塊瓷磚上。該字元在每個資料集合中唯一出現一次。
當在一行中讀入的是兩個零時,表示輸入結束。
output:
對每個資料集合,分別輸出一行,顯示你從初始位置出發能到達的瓷磚數(記數時包括初始位置的瓷磚)。
sample input:
6 9
....#.
.....#
......
......
......
......
......
#@...#
.#..#.
0 0sample output:
思路:
思路是用map陣列來儲存地圖,然後從@點出發,向四周計數。
要用遞迴,如果乙個黑點,則返回1 + 周圍幾個黑點遞迴下去遇到的黑點數,
注意當數過乙個黑點後要把那個點賦值為#,保證不會重複計數。因為可能有邊界的問題,
所以陣列儲存從(1,1)開始,要用memset()把map全部初始化為'#',
這樣返回值就可以用同乙個公式而不用分類討論。
**:
#include #include #include #include using namespace std;
char maze[21][21];
int c,r;
int f(int x,int y)
}int main()}}
cout<}
return 0;
}
DFS特訓 紅與黑(POJ2816)遞迴解法
解題思路 其實遞迴與上一題紅與黑dfs方法求解的思路基本一致,只是這裡的解法更能反映遞迴的特質,我覺得會更有利於幫助我們理解遞迴從而更自如地運用遞迴 經測試,耗時相同的情況下 量也相對少一些 如果遇到不是 的符號,return 1 f x 1,y f x 1,y f x,y 1 f x,y 1 返回...
DFS特訓(POJ2816)紅與黑,DFS解法
解題思路 說白了就是一題求連通塊的題目,這裡運用深度優先搜尋,遍歷每乙個合法的位置,每到乙個位置全域性變數ans都會自加1。這裡一定要注意判別條件,越界的陣列和根據題目要求為 的陣列要素直接跳過即可。遍歷完全後列印全域性變數的數值。注意題目中要求尋找起點的要求。總時間限制 1000ms 記憶體限制 ...
百練 2816 紅與黑
描述 有一間長方形的房子,地上鋪了紅色 黑色兩種顏色的正方形瓷磚。你站在其中一塊黑色的瓷磚上,只能向相鄰的黑色瓷磚移動。請寫乙個程式,計算你總共能夠到達多少塊黑色的瓷磚。輸入包括多個資料集合。每個資料集合的第一行是兩個整數w和h,分別表示x方向和y方向瓷磚的數量。w和h都不超過20。在接下來的h行中...