洛谷 P1162 填塗顏色

題目連接:https://www.luogu.org/problemnew/show/P1162html

題目描述
由數字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 1ios

輸入格式:
每組測試數據第一行一個整數n(1≤n≤30)
接下來n行,由0和1組成的n×n的方陣。測試

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

//感謝黃小U飲品指出本題數據和數據格式不同. 已修改(輸入格式)code

輸出格式:
已經填好數字2的完整方陣。
輸入樣例#1:
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
輸出樣例#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 1 1 1 1 1
說明
1≤n≤30htm

思路blog

在矩形外圍加一個圈,所有設爲0.從這個圈左上角的點去搜索訪問圍牆外的那些0.把訪問到的0所有標記爲3.io

而後掃描矩陣,把0變爲2,把3變爲0.class

最後輸出矩陣。stream

參見下圖

關於這給題目爲什麼要加一圈在外面的探討,能夠閱讀https://www.cnblogs.com/huashanqingzhu/p/7230022.html

AC代碼:

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<queue>
 4 using namespace std;
 5 
 6 #define maxN 103
 7 
 8 int n,a[maxN][maxN]={0};
 9 int dx[4]={-1,0,1,0};//上右下左
10 int dy[4]={0,1,0,-1};
11 void bfs(int x,int y);//在矩陣a[][]中,從(x,y)出發作廣搜 
12 int main()
13 {
14     int i,j;
15     scanf("%d",&n);
16     for(i=1;i<=n;i++)
17         for(j=1;j<=n;j++)
18             scanf("%d",&a[i][j]);
19     bfs(0,0);
20     for(i=1;i<=n;i++)
21         for(j=1;j<=n;j++)
22         {
23             if(a[i][j]==0) a[i][j]=2;
24             else if(a[i][j]==3) a[i][j]=0;
25         }
26   
27       for(i=1;i<=n;i++)
28       {
29         for(j=1;j<=n;j++)
30             printf("%d ",a[i][j]);
31         printf("\n");
32     }
33     return 0;
34 }
35 void bfs(int x,int y)//在矩陣a[][]中,從(x,y)出發作廣搜
36 {
37     queue<int> qx,qy;
38     int xx,yy;
39     qx.push(x);  qy.push(y);
40     a[x][y]=3;
41     
42     while(!qx.empty())
43     {
44         for(int i=0;i<4;i++)
45         {
46             xx=qx.front()+dx[i];  yy=qy.front()+dy[i];
47             if(xx>=0&&xx<=n+1&&yy>=0&&yy<=n+1&&a[xx][yy]==0)
48             {
49                 qx.push(xx);  qy.push(yy);
50                 a[xx][yy]=3;
51             }
52         }
53         qx.pop();  qy.pop();
54     }
55 }
相關文章
相關標籤/搜索