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 }