洛谷oj1162 填塗顏色(bfs)

2021-08-14 13:25:31 字數 1401 閱讀 2257

由數字0 組成的方陣中,有一任意形狀閉合圈,閉合圈由數字1構成,圍圈時只走上下左右4個方向。現要求把閉合圈內的所有空間都填寫成2.例如:6x6的方陣(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。其中n(1<=n<=30)

接下來n行,由0和1組成的nxn的方陣。

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

//感謝黃小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

今天的解題報告有點水啊,一道很裸的bfs,但要分清是在圈外還是圈內需要一些量的**,所以我想了乙個有點妙的解法。在地圖的外面圍一圈『0』(這個很好實現,陣列從1開始並且邊界在n+1就好),從不在地圖上的乙個點『0』開始廣搜,把能遍歷到的點(不能走到1)都打標記如果最後某個等於1的點沒有被打標記並且不等於1,它就一定是在圈子裡的節點,那我們輸出2就好。

那我就放**了

#include#include#includeusing namespace std;

int n;

const int dir_x[4]=;

int map[32][32];

bool visit[32][32];//visit和map應該可以合併我為了**的正確性(其實是懶得改了),就不改了,留給讀者來簡化。

struct node;//方便使用stl的queue模板

void bfs()

} } }

int main()

} bfs();

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

else

{cout<

洛谷 1162 填塗顏色 BFS

洛谷1162題目鏈結 由數字0和1組成的方陣中,有一任意形狀閉合圈,閉合圈由數字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 ...

填塗顏色 洛谷 1162

題目描述 由數字0 組成的方陣中,有一任意形狀閉合圈,閉合圈由數字1構成,圍圈時只走上下左右4個方向。現要求把閉合圈內的所有空間都填寫成2.例如 6x6的方陣 n 6 塗色前和塗色後的方陣如下 00 0000 0000 0000 1111 0011 1101 1001 0112 2111 0001 ...

BFS 洛谷P1162填塗顏色

題目 題解 解法一 bfs includeusing namespace std const int m 31 bool vis m m int n,m,a,b,c,map m m queue q void bfs int x,int y int main for int i 1 i n i i n...