又写水题了。
#include<bits/stdc++.h>
#define pii pair<int,int>
using namespace std;
int n,mz[30][30],dir[4][2]={{-1,0},{0,1},{1,0},{0,-1}};
bool vis[30][30];
bool check(int x,int y){
return x>=0&&x<n&&y>=0&&y<n;
}
bool bfs(int x,int y)
{
vis[x][y]=true;
queue<pii>q;
q.push({x,y});
mz[x][y]=2;
bool find=false;
while(!q.empty()){
pii no=q.front();
q.pop();
for(int i=0;i<4;i++){
int nx=dir[i][0]+no.first;
int ny=dir[i][1]+no.second;
if(check(nx,ny)&&!vis[nx][ny]&&!mz[nx][ny]){
q.push({nx,ny});
vis[nx][ny]=1;
mz[nx][ny]=2;
}
if(!check(nx,ny)) find=true;
}
}
if(find) return false;
return true;
}
void setz()
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(mz[i][j]==2)
mz[i][j]=0;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin>>n;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>mz[i][j];
for(int i=1;i<n-1;i++){
for(int j=1;j<n-1;j++){
if(mz[i][j]==0&&!vis[i][j]){
if(bfs(i,j)){
i=n;
break;
}
setz();
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++)
cout<<mz[i][j]<<" ";
cout<<'\n';
}
return 0;
}