P1162 填涂颜色

将所有的0替换为2,从边缘进行搜索,把圈外的2都换成0

外圈的0一定和边相邻

扩大边界,以便于将边界上单独的0标记。

#include<bits/stdc++.h>
using namespace std;
int n,i,j,a[50][50],ii,jj,bj,f,bjj[50];
void pd(int x,int y){
if(x+1<=n+1&&a[x+1][y]==2){
a[x+1][y]=0;
pd(x+1,y);
}
if(y+1<=n+1&&a[x][y+1]==2){
a[x][y+1]=0;
pd(x,y+1);
}
if(x-1>=0&&a[x-1][y]==2){
a[x-1][y]=0;
pd(x-1,y);
}
if(y-1>=0&&a[x][y-1]==2){
a[x][y-1]=0;
pd(x,y-1);
}
}
int main(){
int nn=0;
cin>>n;
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
cin>>a[i][j];
if(a[i][j]==0) a[i][j]=2;
}
}
for(i=1;i<=n+1;i++){
a[0][i]=2;
a[i][0]=2;
a[n+1][i]=2;
a[i][n+1]=2;
}
pd(0,0);
for(ii=1;ii<=n;ii++){
for(jj=1;jj<=n;jj++){
cout<<a[ii][jj]<<" ";
}
cout<<endl;
}
return 0;
}
/*6
0 1 1 1 1 1
0 1 1 0 1 1
0 1 1 1 1 0
0 1 1 1 1 0
0 1 1 1 1 1
0 1 1 1 1 0*/

posted @ 2022-08-24 17:05  TheMagician  阅读(69)  评论(0)    收藏  举报