演算法標籤 dfs,flood fill
題目描述
有一間長方形的房子,地上鋪了紅色、黑色兩種顏色的正方形瓷磚。
你站在其中一塊黑色的瓷磚上,只能向相鄰(上下左右四個方向)的黑色瓷磚移動。
請寫乙個程式,計算你總共能夠到達多少塊黑色的瓷磚。
輸入格式
輸入包括多個資料集合。
每個資料集合的第一行是兩個整數 w 和 h,分別表示 x 方向和 y 方向瓷磚的數量。
在接下來的 h 行中,每行包括 w 個字元。每個字元表示一塊瓷磚的顏色,規則如下
1)『.』:黑色的瓷磚;
2)『#』:白色的瓷磚;
3)『@』:黑色的瓷磚,並且你站在這塊瓷磚上。該字元在每個資料集合中唯一出現一次。
當在一行中讀入的是兩個零時,表示輸入結束。
輸出格式
對每個資料集合,分別輸出一行,顯示你從初始位置出發能到達的瓷磚數(記數時包括初始位置的瓷磚)。
資料範圍
1≤w,h≤20
輸入樣例:6 9
....#.
.....#
......
......
......
......
......
#@...#
.#..#.
0 0
輸出樣例:45
思路
bfs遍歷所有點
深搜**更短,但層數過多更有可能爆棧。
c++ **
#include
#include
using
namespace std;
const
int n=25;
char g[n]
[n];
bool st[n]
[n];
//判斷走過沒
int w,h;
int dx=
,dy=
;//題目中能移動的相鄰的四個方向的偏移量
intdfs
(int x,
int y)
return cnt;
//返回數量
}int
main()
memset
(st,0,
sizeof st)
;//在多次狀態中都要使用 所以每次都要清空
cout<<
dfs(stax,stay)
<}return0;
}
資訊學奧賽一本通 1216 紅與黑 evd
題目描述 有一間長方形的房子,地上鋪了紅色 黑色兩種顏色的正方形瓷磚。你站在其中一塊黑色的瓷磚上,只能向相鄰的黑色瓷磚移動。請寫乙個程式,計算你總共能夠到達多少塊黑色的瓷磚。輸入 包括多組資料。每組資料的第一行是兩個整數w和h,分別表示x方向和y方向瓷磚的數量。w和h都不超過20。在接下來的h行中,...
資訊學奧賽一本通C 語言 1216 紅與黑
題目描述 有一間長方形的房子,地上鋪了紅色 黑色兩種顏色的正方形瓷磚。你站在其中一塊黑色的瓷磚上,只能向相鄰的黑色瓷磚移動。請寫乙個程式,計算你總共能夠到達多少塊黑色的瓷磚。輸入 包括多個資料集合。每個資料集合的第一行是兩個整數w和h,分別表示x方向和y方向瓷磚的數量。w和h都不超過20。在接下來的...
資訊學奧賽一本通 小球(drop)
許多的小球乙個乙個的從一棵滿二叉樹上掉下來組成fbt full binary tree,滿二叉樹 每一時間,乙個正在下降的球第乙個訪問的是非葉子節點。然後繼續下降時,或者走右子樹,或者走左子樹,直到訪問到葉子節點。決定球運動方向的是每個節點的布林值。最初,所有的節點都是false,當訪問到乙個節點時...