这道题我们观察可以看到,判断是否闭合,我们可以充分利用四个边的0。
#include<bits/stdc++.h>
using namespace std;
const int maxn=35;
int n,a[maxn][maxn];
int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
void dfs(int x,int y){
for(int i=0;i<4;i++){
int tx=x+dx[i],ty=y+dy[i];
if(tx>=1&&tx<=n&&ty>=1&&ty<=n&&!a[tx][ty]){
a[tx][ty]=2;
dfs(tx,ty);
}
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
scanf("%d",&a[i][j]);
}
for(int i=1;i<=n;i++){
if(a[i][1]==0)
dfs(i,1);
if(a[i][n]==0)
dfs(i,n);
if(a[1][i]==0)
dfs(1,i);
if(a[n][i]==0)
dfs(n,i);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i][j]==2){
printf("%d ",0);
}
else if(a[i][j]==1){
printf("%d ",1);
}
else printf("%d ",2);
}
cout<<endl;
}
return 0;
}