洛谷P1162 填塗顏色 DFS漫水填充法

2021-08-22 08:24:35 字數 2310 閱讀 5967

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

1 1 1 1 1 1

0 0 0 0 0 0

0 0 1 1 1 1

0 1 1 2 2 1

1 1 2 2 2 1

1 2 2 2 2 1

1 1 1 1 1 1

每組測試資料第一行乙個整數 n(1 \le n \le 30)n(1≤n≤30)

接下來 nn 行,由 00 和 11 組成的 n \times nn×n 的方陣。

方陣內只有乙個閉合圈,圈內至少有乙個 00 。

//感謝黃小u飲品指出本題資料和資料格式不一樣. 已修改(輸入格式)

已經填好數字 2 的完整方陣。

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

1 1 1 1 1 1

0 0 0 0 0 0

0 0 1 1 1 1

0 1 1 2 2 1

1 1 2 2 2 1

1 2 2 2 2 1

1 1 1 1 1 1

1<=n<=30

在方陣內只有乙個閉合圈,也就意味著除了被包圍的那些0連通塊,其餘0連通塊都與方陣邊界有接觸,

先對所有0連通塊floodfill預先塗色,每個不同的值為0的連通塊都被替換成-1,-2,-3...如下圖

再遍歷邊界,找出並標記與邊界有接觸的0連通塊

int temp[maxn];

memset(temp,0,sizeof(temp));

for(int i=1;i<=n;i++)

}for(int i=1;i<=n;i++)

}for(int i=1;i<=n;i++)

}for(int i=1;i<=n;i++)

}

最後輸出時判斷是否是邊界上的0,又是否是1即可

#includeusing namespace std;

const int maxn=35;

int maze[maxn][maxn];

int book[maxn][maxn];

int tx,ty;

int n;

/*void move(int x)

if(x==2)

if(x==3)

if(x==4)

}*/void dfs(int x,int y,int color)

if(k==2)

if(k==3)

if(k==4)

if(tx<1||tx>n||ty<1||ty>n) continue;

if(maze[tx][ty]==0&&book[tx][ty]==0)

}return;}​

int main()}}

printf("變為\n");

for(int i=1;i<=n;i++)

printf("\n");

}​​int temp[maxn];

memset(temp,0,sizeof(temp));

for(int i=1;i<=n;i++)

}for(int i=1;i<=n;i++)

}for(int i=1;i<=n;i++)

}for(int i=1;i<=n;i++)

}​    for(int i=1;i<=n;i++)

else if(temp[-maze[i][j]]==1)

else

}printf("\n");

}return 0;

}

洛谷P1162 填塗顏色 DFS

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

洛谷P1162填塗顏色 dfs做法

題目 分類是bfs,但dfs也可做 思路 因為要把被1包圍的0變成2,所以我們要找那些0是被1包起來的,但從另乙個角度思考,0被1分成了兩部分,外圈和內圈,我們可以通過找外圈來找內圈.做法 用陣列a 1 1 a n n 存輸入的數,在外面a 0 0 a n 1 n 1 存一圈0 為什麼要這樣?因為為...

洛谷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...