POJ 2816 紅與黑 遞迴

2021-08-27 05:32:45 字數 1184 閱讀 5913

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行中...