解题思路
搜索时,碰到0则将其变为3(代表搜索过),碰到1则停止
最后3以0输出,1还是输出1,0以2输出(此时输出的是被1包住的0,变为了2)
代码
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
int d[40][40];//代表图上的坐标
int dx[] = {0,0,-1,1};
int dy[] = {1,-1,0,0};
//代表上下左右4个方向
int n;
bool inmp(int x,int y){
return(x >= 0 && x <= n+1 && y >= 0 && y <= n+1);
}//限定搜索的范围
void dfs(int x,int y){
if(!inmp(x,y)) return;
if(d[x][y] == 1||d[x][y] == 3) return;
d[x][y] = 3;
for(int i = 0; i < 4; i++){
int tx = x + dx[i],ty = y + dy[i];
dfs(tx,ty);
}
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin >> n;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
cin >> d[i][j];
dfs(0,0);//从0,0开始深度搜索,避免1,1是1的情况
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
if(d[i][j] == 3) cout << 0 <<' ';
else if(d[i][j] == 1) cout << 1 << ' ';
else cout << 2 << ' ';
}
cout << '\n';
}
return 0;
}