dfs,最后输出时会随机多冒出一个2,调整了输出以后第四点还是WA了
#include<bits/stdc++.h>
using namespace std;
const int N=3e4+5;
int n,sum,ans;
char a[N][N];
bool vis[N][N];
bool flag;
int dirx[4]={0,0,1,-1};
int diry[4]={-1,1,0,0};
void dfs(int x,int y)
{
for(int i=0;i<4;i++)
{
int xx=x+dirx[i];
int yy=y+diry[i];
if((xx==1||xx==n||yy==1||yy==n)&&a[xx][yy]=='0') flag=true;
if(a[xx][yy]=='1'||xx==1||xx==n||yy==1||yy==n||vis[xx][yy]) continue;
a[xx][yy]='2';
sum++;
vis[xx][yy]=true;
dfs(xx,yy);
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
for(int i=2;i<n;i++)
{
for(int j=2;j<n;j++)
{
if(a[i][j]=='0'&&!vis[i][j])
{
vis[i][j]=true;
flag=false;
sum=1;
dfs(i,j);
if(flag!=true) a[i][j]='2';
ans+=sum;
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(a[i][j]=='2')
{
for(int s=0;s<4;s++)
{
int xx=i+dirx[s];
int yy=j+diry[s];
if(a[xx][yy]=='0')
{
a[i][j]='0';continue;
}
}
}
cout<<a[i][j]<<" ";
}
cout<<endl;
}
}