#include <bits/stdc++.h>
using namespace std;
struct note{
int x,y;
}que[1000];
int a[31][31]={0};
int book[31][31]={0};
int head,tail;
int startx,starty;
int n;
void bfs()
{
int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}}; //右下左上;
int flag=0;
head=1;
tail=1;
que[tail].x=startx;
que[tail].y=starty;
tail++;
book[startx][starty]=1;
while(head<tail)
{
int count=0;
for(int k=0; k<4; k++)
{
int tx = que[head].x+next[k][0];
int ty = que[head].y+next[k][1];
if(tx<1 || tx>n || ty<1 || ty>n)
continue;
if(book[tx][ty]==0 && a[tx][ty]==0)
{
//新扩展的入队
book[tx][ty]=1;
que[tail].x=tx;
que[tail].y=ty;
a[tx][ty]=2;
tail++;
}
}
head++; //已经扩展过的起始点出队
}
}
int main()
{
cin>>n;
int flag=1;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
{
cin>>a[i][j];
//输入的第一个一的右下角的0为起始广搜点
if(flag && a[i][j]==1)
{
startx=i+1;
starty=j+1;
flag=0;
}
}
a[startx][starty]=2;
bfs();
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
填涂颜色
最新推荐文章于 2024-05-16 20:13:14 发布