Untitled

 avatar
unknown
plain_text
a year ago
1.8 kB
4
Indexable
2 / 1 / 3 / 1 / 3 / 6 / 3 / 8 / 5 / 7 / 9 / 4 / 11 / 6 / 10 / 10 / 5 / 7 / 5 / 11 / 6 / 22 / 5 / 7 / 9 / 3 / 2 / 7 / 4 / 5 / 9 / 9 / 5 / 7 / 9 / 20 / 5 / 12 / 12 / 8 / 8 / 22 / 11 / 8 / 2 / 10 / 5 / 18 / 49 / 49

public class Solution {
	static int[][] m, v;
	static int N, M, xx, yy, xxx, yyy;
	static boolean check = false;
	static int[] dx = { 0, -1, 0, 1 };
	static int[] dy = { -1, 0, 1, 0 };
	static Queue<Node> q;

public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int T = sc.nextInt();
		q = new Queue<>();

		for (int tc = 1; tc <= T; tc++) {
			N = sc.nextInt();
			M = sc.nextInt();
			check = false;

			m = new int[N + 1][M + 1];
			for (int i = 1; i <= N; i++) {
				for (int j = 1; j <= M; j++) {
					m[i][j] = sc.nextInt();
					if (m[i][j] == 2) {
						xx = i;
						yy = j;
					}
					if (m[i][j] == 3) {
						xxx = i;
						yyy = j;
					}
				}
			}

			int step = 1;
			while (!check) {
				v = new int[N + 1][M + 1];
				bfs(xx, yy, step);
				if (check) {
					break;
				}
				step++;
			}

			System.out.println("Case #" + tc);
			System.out.println(step);
		}
	}

	public static boolean isSafe(int x, int y) {
		return x > 0 && x <= N && y > 0 && y <= M;
	}

	public static void bfs(int r, int c, int s) {
		q.enQueue(new Node(r, c));
		v[r][c] = 1;

		Node cr;
		while (!q.isEmpty()) {
			cr = q.peek();
			q.deQueue();

			for (int st = 1; st <= s; st++) {
				for (int i = 0; i < 4; i++) {
					int nx = cr.x + dx[i] * st;
					int ny = cr.y + dy[i] * st;
					if (isSafe(nx, ny) && v[nx][ny] == 0 && m[nx][ny] != 0) {
						q.enQueue(new Node(nx, ny));
						v[nx][ny] = 1;
						if (v[xxx][yyy] == 1) {
							check = true;
							return;
						}
					}
				}
				if (check)
					return;
			}
		}
	}
}
Editor is loading...
Leave a Comment