解题思路
将0都染成2,再将暴露在闭合圈外的2染回0
AC代码
#include <bits/stdc++.h>
using namespace std;
int n;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
int a[32][32];
void bfs();
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=0;i<=n+1;i++)
{
for(int j=0;j<=n+1;j++)
{
if(a[i][j]==0)
a[i][j]=2;
}
}
bfs();
return 0;
}
void bfs()
{
queue<pair<int,int> >q;//pair队列存坐标
q.push(make_pair(0,0));
while(!q.empty()) {
int x=q.front().first,y=q.front().second;
q.pop();
a[x][y]=0;//赋值为0,改写
for(int i=0;i<4;i++) {
if(a[x+dx[i]][y+dy[i]]==2) {//搜索还是2的相邻格子
q.push(make_pair(x+dx[i],y+dy[i]));
}
}
}
for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++) {//从1输出到n,别把辅助外圈一块输出了
cout<<a[i][j]<<' ';
}
cout<<endl;
}
}