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