填涂颜色

https://www.luogu.org/problemnew/show/P1162

这种方法是通过 查外面没有被1包围的0 。。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<string>
 7 #include<cmath>
 8 #include<set>
 9 #include<vector>
10 #include<stack>
11 #include<queue>
12 #include<map>
13 using namespace std;
14 #define ll long long
15 #define se second
16 #define fi first
17 const int INF= 0x3f3f3f3f;
18 const int N=1e5+5;
19 
20 int n,a[35][35],vis[35][35];
21 int dir[4][2]={0,1,0,-1,1,0,-1,0};
22 queue<int>q;
23 
24 void bfs(int x,int y)
25 {
26     vis[x][y]=1;
27     q.push(x);
28     q.push(y);
29     while(!q.empty())
30     {
31         int e=q.front(); q.pop();
32         int f=q.front(); q.pop();
33         for(int i=0;i<4;i++)
34         {
35             int w=e+dir[i][0];
36             int m=f+dir[i][1];
37             if(w<=n && w>=1 &&
38                m<=n && m>=1 &&
39                a[w][m]==0 &&vis[w][m]==0)
40 
41                 vis[w][m]=1,q.push(w),q.push(m);
42         }
43     }
44 }
45 
46 int main()
47 {
48     cin>>n;
49     for(int i=1;i<=n;i++){
50         for(int j=1;j<=n;j++){
51             cin>>a[i][j];
52             if( a[i][j]==1 ) vis[i][j]= 1;
53         }
54     }
55     for(int i=1;i<=n;i++)
56     {
57         if(vis[1][i]==0) bfs(1,i);
58         if(vis[n][i]==0) bfs(n,i);
59         if(vis[i][1]==0) bfs(i,1);
60         if(vis[i][n]==0) bfs(i,n);
61     }
62     for(int i=1;i<=n;i++){
63         for(int j=1;j<=n;j++){
64             if(vis[i][j]==0) cout<<2<<' ';
65             else cout<<a[i][j]<<' ';
66         }
67         cout<<endl;
68     }
69 }

猜你喜欢

转载自www.cnblogs.com/thunder-110/p/9316251.html