先说一下我的思路:先把所有的0赋值成2,再把边界上的2赋回0,再从边界开始广搜。
但是他没进行搜索啊啊啊
还有因为敲这行代码的时间过于久远,我忘了结构体相关语言QwQ
#include<iostream>
#include<queue>
using namespace std;
int n,a[35][35],b[35][35];
int nxt[4][2]={{-1,0},{0,1},{1,0},{0,-1}};
struct node{
int x,y;
}m,p;
queue<node>q;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
if(a[i][j]==0)
{
a[i][j]=2;
if(i==1||j==1||i==n||j==n)
a[i][j]=0;
}
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(a[i][j]==0)
{
p.x=i;
p.y=j;
q.push(p);
b[i][j]=1;
while(!q.empty())
{
m=q.front();
q.pop();
int tx,ty;
for(int k=0;k<4;k++)
{
tx=m.x+nxt[i][0];
ty=m.y+nxt[i][1];
if(tx>n||tx<1||ty>n||ty<1||b[tx][ty]==1||a[tx][ty]==1)
continue;
b[tx][ty]=1;
a[tx][ty]=0;
p.x=tx;
p.y=ty;
q.push(p);
}
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
return 0;
}