ca0vnv @ 2024-01-24 16:57:17
#include<bits/stdc++.h>
using namespace std;
int n,a[35][35];
struct point{
int x,y;
};
queue<point> q;
int main(){
cin>>n;
for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)cin>>a[i][j];//输入
a[0][0]=2;
for(int i=0;i<=n+1;i++){
for(int j=0;j<=n+1;j++){
if(i==0&&j==0)continue;
if((a[i-1][j]==2||a[i+1][j]==2||a[i][j-1]==2||a[i][j+1]==2)&&a[i][j]!=1)//判断在不在圈中
a[i][j]=2;//不在圈中设置成2
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i][j]==1){//如果是围墙输出1
cout<<1<<' ';
}else if(a[i][j]==2){//如果不在圈中输出0
cout<<0<<' ';
}else {
cout<<2<<' ';
}
}
cout<<endl;
}
return 0;
}
by xiao_queen @ 2024-01-24 17:29:28
闭合圈外的0不能保证全是连通的,这种方法只能保证跟a[0][0]有直接或间接联系的0可以被搜到,如果没有这种联系的话就不能被搜到。
(附上特殊样例)
6
0 0 1 1 1 0
1 1 1 0 1 0
1 0 0 0 0 1
1 1 0 1 1 1
0 1 0 1 0 0
0 1 1 1 0 0
by ca0vnv @ 2024-02-02 10:13:46
@xiao_queen 没我多开了一条边,在最外圈多开了一条边防止这种情况