#include <bits/stdc++.h>
using namespace std;
const int N=2*30+5;
int a[N][N];
int n;
bool valid(int x,int y)
{
return x>=0&&x<=n+1&&y>=0&&y<=n+1;
}
int dx[]={-1,1,0,0};
int dy[]={0,0,-1,1};
void bfs(int _x,int _y)
{
queue<pair<int,int>>q;
q.push({_x,_y});
a[_x][_y]=-1;
while (!q.empty())
{
auto t=q.front();
q.pop();
int nx=t.first;
int ny=t.second;
// printf("nx==%d ny==%d\n",nx,ny);
for(int i=0;i<4;i++)
{
if(valid(nx+dx[i],ny+dy[i])&&a[nx+dx[i]][ny+dy[i]]==0)
{
a[nx+dx[i]][ny+dy[i]]=-1;
q.push({nx+dx[i],ny+dy[i]});
}
}
}
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
scanf("%d",&a[i][j]);
}
}
bfs(0,0);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
// printf("%-4d",a[i][j]);
if(a[i][j]==-1)
{
printf("0 ");
}
else if(a[i][j]==1)
{
printf("1 ");
}
else
{
printf("2 ");
}
}
printf("\n");
}
return 0;
}
本题注意的地方:我们可以插入两行两列,使得其外边都是0。这样染色比较好做。
其次,要注意valid函数的书写
是在0-n+1之间,而不是0-n