洛谷P1162填塗顏色 dfs做法

2021-09-27 05:59:47 字數 741 閱讀 5661

題目

分類是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

洛谷P1162 填塗顏色 DFS

從某一點開始搜尋並標記,碰到牆或者已經被搜尋過就返回。除了牆以外沒有被標記過的點就是被牆圍住的點,最後輸出2即可。此題最坑的地方在於有可能開始搜尋的第乙個點就是牆,因此存圖的陣列下標從1開始而非0,目的是在圖的外面加一圈0,這樣就能解決圖的第乙個點就是牆的問題。注意遞迴結束的條件!include d...

洛谷P1162 填塗顏色

由數字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

由數字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...