写这个题目可以先去看看
两个题目都是用染色法解决
#include<bits/stdc++.h>
using namespace std;
int x,y,n;
int res=0;
int X[4]={0,0,-1,1};
int Y[4]={-1,1,0,0};
int a[510][510]={0};
char c[510][550];
void dfs(int x,int y){
a[x][y]=2;//染色 标记一下走过了
int dx,dy;
for(int i=0;i<=3;i++){
dx=x+X[i];
dy=y+Y[i];
if(dx>=0&&dx<=n+1&&dy>=0&&dy<=n+1&&a[dx][dy]!=1&&a[dx][dy]!=2){//判断条件能不能搜索
dfs(dx,dy);
}
}
return ;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>c[i][j];
if(c[i][j]=='1')a[i][j]=1;
else a[i][j]=0;
}
}
dfs(0,0);//从0开始 额外加一圈进行搜索
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i][j]==0)cout<<"2 ";
else if(a[i][j]==2)cout<<"0 ";
else if(a[i][j]==1)cout<<"1 ";
}
cout<<endl;
}
return 0;
}