题目描述
代码
#include<iostream>
using namespace std;
int a[32][32],b[32][32];
int dx[5]= {-1,1,0,0};
int dy[5]= {0,0,-1,1};
int n,i,j;
void dfs(int p,int q) {
int i;
if(p<0||p>n+1||q<0||q>n+1||a[p][q]!=0)
return ;//判断是否越界 ,且是否为寻找过的点。是就返回 ,不是则继续
a[p][q]=1;//标记已搜过的且在封闭圈内的点为'1'
for(i=0; i<4; i++)
dfs(p+dx[i],q+dy[i]);//四个方向搜索
}
int main() {
cin>>n;//输入n
for(i=1; i<=n; i++)
for(j=1; j<=n; j++) {
cin>>b[i][j];//输入n*n的矩阵
if(b[i][j]==0) a[i][j]=0;//标记b[i][j]值为'0'的位置
else a[i][j]=2;//标记b[i][j]值为'1'的位置为'2'
}
dfs(0,0);//开始深搜
for(i=1; i<=n; i++){
for(j=1; j<=n; j++) {
if(a[i][j]==0) cout<<2<<' ';//如果a[i][j]未被标记成'1',说明这个点在封闭圈内,输出'2'
else cout<<b[i][j]<<' ';//如果a[i][j]被标记成'1',说明这个点不在封闭圈内,输出原本数组
}
cout<<endl;
}//输出时记得换行
return 0;
}