你这个搜索方法会有遗漏,比如下面这个形状:
```
00000000
00111000
00101111
00100001
11100001
10000001
10111001
11101111
```
如果按照你的方法来做,最下面一排中间的那个0也会变成2
by weifeng_yuhuo @ 2024-01-27 09:18:51
可以用深搜做
by yangjunrui @ 2024-01-27 09:39:43
试试这个:
```cpp
#include <bits/stdc++.h>
using namespace std;
struct st{
int x,y;
};
int a[35][35];
int n;
int dx[8]= {1,-1, 0, 0};
int dy[8]= {0,0,1,-1};
int fun(int x2,int y2)
{
int x3,y3;
if (x2<0||y2<0||x2>n+1||y2>n+1) return 0;
if (a[x2][y2] !=0) return 0;
a[x2][y2]=3;
for (int i=0;i<4;i++)
{
x3=x2+dx[i];y3=y2+dy[i];
if (a[x3][y3] ==0)
{
fun(x3,y3);
}
}
}
int main()
{
st b0;
cin>>n;
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
{
cin>>a[i][j];
}
}
fun(0,0);
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
{ if (a[i][j]==3) cout <<"0 ";
else if (a[i][j]==0) cout <<"2 ";
else cout<<"1 ";
}
cout<<endl;
}
return 0;
}
```
by qx_wangziyan @ 2024-01-27 10:05:55
全部re
by Kaaras @ 2024-01-29 10:19:31
```cpp
#include<bits/stdc++.h>
using namespace std;
int dx[4]={-1,1,0,0};
int dy[4]={0,0,1,-1};
int n,a[10086][10086],b[10086][10086];
void dfs(int x,int y){
if(x<1 || x>n || y<1 || y>n || a[x][y]!=0) return;
a[x][y]=1;
for(int i=0;i<4;i++)
dfs(x+dx[i],y+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]);
if(a[i][j]==1) b[i][j]=-1;
}
}
for(int i=1;i<=n;i++){
if(a[i][1]!=1) dfs(i,1);
if(a[i][n]!=1) dfs(i,n);
}
for(int i=1;i<=n;i++){
if(a[1][i]!=1) dfs(1,i);
if(a[n][i]!=1) dfs(n,i);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(b[i][j]==-1) printf("1 ");
else if(a[i][j]==0) printf("2 ");
else printf("0 ");
}
printf("\n");
}
return 0;
}
```
by mouyulin @ 2024-02-01 09:36:36
感谢大佬
by Kaaras @ 2024-02-02 09:11:53