題目
分類是bfs,但dfs也可做
思路:因為要把被1包圍的0變成2,所以我們要找那些0是被1包起來的,但從另乙個角度思考,0被1分成了兩部分,外圈和內圈,我們可以通過找外圈來找內圈.
做法:用陣列a[1][1]a[n][n]存輸入的數,在外面a[0][0]a[n+1][n+1]存一圈0
為什麼要這樣??
因為為了方便找搜尋的起點.
這樣可以直接dfs(0,0)
不然的話,dfs(1,1),萬一a[1][1]是1怎麼辦,我們不知道最外圈那個點是0.每個點判斷的話會tle
所以在外面加一圈0,最外圈一定可以做起點來搜,而且因為我們只輸出1~n,所以0和n+1並不會影響輸出
#include#include#include#includeusing namespace std;
int a[40][40];
int b[40][40];
int n;
int c =;
int d =;
void dfs(int x,int y)
int main()
for(int i =1;i <= n; i++)
for(int j =1;j <= n; j++)
dfs(0,0);
for(int i = 1;i<= n;i++)
{for(int j = 1;j <= n;j ++)
cout 從某一點開始搜尋並標記,碰到牆或者已經被搜尋過就返回。除了牆以外沒有被標記過的點就是被牆圍住的點,最後輸出2即可。此題最坑的地方在於有可能開始搜尋的第乙個點就是牆,因此存圖的陣列下標從1開始而非0,目的是在圖的外面加一圈0,這樣就能解決圖的第乙個點就是牆的問題。注意遞迴結束的條件!include d... 由數字0組成的方陣中,有一任意形狀閉合圈,閉合圈由數字1構成,圍圈時只走上下左右4個方向。現要求把閉合圈內的所有空間都填寫成2.例如 6 6的方陣 n 6 塗色前和塗色後的方陣如下 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1 1 1 0 0 0 1 1 0 0 0 0 1... 由數字0組成的方陣中,有一任意形狀閉合圈,閉合圈由數字1構成,圍圈時只走上下左右4個方向。現要求把閉合圈內的所有空間都填寫成2.例如 6 6的方陣 n 6 塗色前和塗色後的方陣如下 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1 1 1 0 0 0 1 1 0 0 0 0 1...洛谷P1162 填塗顏色 DFS
洛谷P1162 填塗顏色
填塗顏色 洛谷P1162