import java.util.ArrayDeque;
import java.util.Scanner;
/**
* P1162 填土颜色 (dfs)
*/
public class P1162 {
static int T, n;
static int[][] map;
static ArrayDeque<NodeC> que = new ArrayDeque<NodeC>();
static int[][] dir = {
{-1,0},{+1,0},{0,-1},{0,+1}};
static boolean[][] flag;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
T = sc.nextInt();
for(int test_case=1;test_case<=T;test_case++) {
n = sc.nextInt();
map = new int[n][n];
flag = new boolean[n][n];
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) {
map[i][j] = sc.nextInt();
if((i==0||j==0||i==n-1||j==n-1)&&map[i][j]==0) {
que.addLast(new NodeC(i, j));
}
}
}
while(!que.isEmpty()) {
NodeC node = que.getFirst();
que.removeFirst();
if(flag[node.x][node.y] == true) {
continue;
}
dfs(node);
}
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) {
if(flag[i][j]==true||map[i][j]==1) {
System.out.print(map[i][j]+" ");
}else {
System.out.print(2+" ");
}
}
System.out.println();
}
}
}
private static void dfs(NodeC node) {
for(int i=0;i<4;i++) {
NodeC dirNode = new NodeC(node.x+dir[i][0], node.y+dir[i][1]);
if(isVal(dirNode)) {
flag[dirNode.x][dirNode.y] = true;
dfs(dirNode);
}
}
}
private static boolean isVal(NodeC dirNode) {
int x = dirNode.x;
int y = dirNode.y;
return x>=0 && x<n && y>=0 && y<n && map[x][y]==0 && flag[x][y]==false;
}
}
class NodeC {
int x, y;
public NodeC(int x, int y) {
super();
this.x = x;
this.y = y;
}
}
P1162 填土颜色 (dfs)
猜你喜欢
转载自blog.csdn.net/qq_28635317/article/details/113104153
今日推荐
周排行