P1162 填土颜色 (dfs)


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;
	}

}

猜你喜欢

转载自blog.csdn.net/qq_28635317/article/details/113104153