#include<bits/stdc++.h>
using namespace std;
int qx[1000],qy[1000],v[30][30],a[30][30],n,xr[4]={0,0,1,-1},yr[4]={1,-1,0,0};
void bfs(int x,int y)
{
int h=0,t=1,k=2;
qx[1]=x;
qy[1]=y;
while(h<t)
{
h++;
for(int i=0;i<4;i++)
{
int tx=qx[h]+xr[i],ty=qy[h]+yr[i];
if(tx<0||ty<0||tx>=n&&ty>=n)
{
k=-1;
continue;
}
if(v[tx][ty]==0&&a[tx][ty]==0)
{
t++;
qx[t]=tx;
qy[t]=ty;
v[tx][ty]=1;
}
}
}
for(int i=1;i<=t;i++)
{
a[qx[i]][qy[i]]=k;
}
}
int main() {
cin>>n;
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
cin>>a[i][j];
for(int i=0; i<n; i++)
for(int j=0; j<n; j++) {
if(a[i][j]==0&&v[i][j]==0) {
bfs(i,j);
}
}
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++)
cout<<max(0,a[i][j])<<" ";
cout<<endl;
}
}
这份代码跑2,4点会RE,经本地测试,在所有代码(包括最后输出)跑完时,这个程序直接出错了。这是为什么,为什么这么玄学