同种类型的题目还有P1506 拯救oibh总部
#include<cstdio>
using namespace std;
int a[32][32],b[32][32];
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
int n,i,j;
//dfs结果:最后a为0的地方都是闭合圈内
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;
for (i=0;i<4;i++)
dfs(p+dx[i],q+dy[i]);
}
int main(){
//freopen("1.txt","r",stdin);
scanf("%d",&n);
for (i=1;i<=n;i++)
for (j=1;j<=n;j++){
scanf("%d",&b[i][j]);
if (b[i][j]==0) a[i][j]=0;
else a[i][j]=1;
}
dfs(0,0);//默认加了一圈最外圈,方便dfs(不然若0,0是墙,还要另外判断)
for (i=1;i<=n;i++){
for (j=1;j<=n;j++){
if (a[i][j]==0)
printf("2 ");
else
printf("%d ",b[i][j]);
}
printf("\n");
}
}