弱小和无知不是生存的障碍,傲慢才是。------《三体》
import java.util.*;
public class P1162 {
// 要点:
// 1.n<=30,数据量小,30*30也才900个数字。
// 2.输出需要注意
static int [][]a=new int[32][32];
static int [][]b=new int[32][32];//是a的拷贝,用于输出。
static int n;
static void dfs(int x,int y) {
if(x<0||x>n+1||y<0||y>n+1||b[x][y]==1)//回退 在周围多一圈,不用在递归的时候多一层判断
return;
if(b[x][y]==0)
b[x][y]=1;
dfs(x+1,y);//向右
dfs(x-1,y);//向左
dfs(x,y+1);//向上
dfs(x,y-1);//向下
}
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
n=cin.nextInt();
for(int i=1;i<=n;i++)//坐标从(1,1)开始,方便后面的判断
for(int u=1;u<=n;u++)
{ a[i][u]=cin.nextInt();
if(a[i][u]==1)
b[i][u]=1;
else
b[i][u]=0;
}
dfs(0,0);//坐标(0,0)不是数据点,是为了,把包围圈之外的0标记
for(int i=1;i<=n;i++) {//从数据点开始读取
for(int u=1;u<=n;u++) {
if(b[i][u]==0)// 因为b图中只有闭合圈1和闭合圈内的0,无法判断输出闭合圈外的0
System.out.print(2+" ");//输出闭合圈内2
else
System.out.print(a[i][u]+" ");
}
System.out.println();
}
cin.close();
}
}