填涂颜色
由数字0组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向。现要求把闭合圈内的所有空间都填写成2.例如:6×6的方阵(n=6),涂色前和涂色后的方阵如下:
0 0 0 0 0 0
0 0 1 1 1 1
0 1 1 0 0 1
1 1 0 0 0 1
1 0 0 0 0 1
1 1 1 1 1 1
0 0 0 0 0 0
0 0 1 1 1 1
0 1 1 2 2 1
1 1 2 2 2 1
1 2 2 2 2 1
1 1 1 1 1 1
输出格式
已经填好数字2的完整方阵。
#include<bits/stdc++.h>
using namespace std;
int n;
int a[35][35]= {0};
int Next[4][2]= {{0,1},{1,0},{-1,0},{0,-1}};
void dfs(int x,int y) {
a[x][y]=3;
int xt,yt;
for(int i=0; i<4; i++) {
xt=Next[i][1]+x;
yt=Next[i][0]+y;
if(xt<0||xt>n+1||yt<0||yt>n+1||a[xt][yt]!=0) continue;
dfs(xt,yt);
}
return ;
}
int main() {
cin>>n;
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
cin>>a[i][j];
}
}
dfs(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]==1)cout<<a[i][j]<<" ";
else cout<<2<<" ";
}
cout<<endl;
}
}