#include<bits/stdc++.h>
#define go(i,n,m) for(int i=n;i<=m;i++)
#define ro(i,n,m) for(int i=n;i>=m;i--)
using namespace std;
int a[32][32],b[32][32];
int dx[]={0,0,0,-1,1};
int dy[]={0,1,-1,0,0};//第一个表示不动,是充数的,后面的四个分别是上下左右四个方向
int n;
void dfs(int p,int q)
{
if(p<0||q<0||p>n+1||q>n+1||a[p][q]!=0)//如果搜过头或者已经被搜过了或者本来就是墙的就往回
return;
else
{
a[p][q]=1;//染色
go(i,1,4){
dfs(p+dx[i],q+dy[i]);//向四个方向搜索
}
}
}
int main(){
cin>>n;
go(i,1,n){
go(j,1,n){
cin>>b[i][j];//初始矩阵
if(b[i][j]==0) a[i][j]=0;
else a[i][j]=2;//先涂上0 和 2
}
}
dfs(0,0);
go(i,1,n){
go(j,1,n){
if(a[i][j]==0)cout<<2<<" ";//如果染过色以后i,j那个地方还是0,说明没有搜到,就是周围有墙,当然就是被围住了,然后输出2
else cout<<b[i][j]<<" "; //因为被染色了,本来没有被围住的水和墙都染成了1,所以就输出b[i][j]
}
cout<<endl;
}
}
P1162 填涂颜色【深搜dfs】
最新推荐文章于 2025-04-03 23:17:47 发布