题解:搜吧
#include <iostream>
#include <cstdio>
using namespace std;
int n,flag,x;
int map[50][50];
bool check(int x,int y){
if(x<1||y<1||x>n||y>n||map[x][y]!=2) return 0;
return 1;
}
void dfs(int x,int y)
{
if(!check(x,y)) return ;
map[x][y]=0;
dfs(x+1,y);dfs(x-1,y);
dfs(x,y+1);dfs(x,y-1);
}
void init()
{
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
scanf("%d",&x);
if(x==0) x=2;
map[i][j]=x;
}
}
void work()
{
for(int i=1;i<=n;i++)
dfs(i,1),dfs(i,n),dfs(1,i),dfs(n,i);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
printf("%d ",map[i][j]);
puts("");
}
}
int main()
{
init();
work();
}