一.题目描述
给你一个 n x n
的二进制矩阵 grid
中,返回矩阵中最短 畅通路径 的长度。如果不存在这样的路径,返回 -1
。
https://leetcode-cn.com/problems/shortest-path-in-binary-matrix/
二.代码
private static int[][] directions = {{1, -1}, {1, 0}, {1, 1}, {-1, -1}, {-1, 0}, {-1, 1}, {0, 1}, {0, -1}};
int n;
public int shortestPathBinaryMatrix(int[][] grid) {
n = grid.length - 1;
if (grid[0][0] == 1 || grid[n][n] == 1) {
return -1;
}
Queue<int[]> pos = new LinkedList<>();
grid[0][0] = 1;
pos.add(new int[] {0, 0});
while (!pos.isEmpty() && grid[n][n] == 0) {
int[] xy = pos.remove();
int preLength = grid[xy[0]][xy[1]];
for (int i = 0; i < 8; i++) {
int newX = xy[0] + directions[i][0];
int newY = xy[1] + directions[i][1];
if (inGrid(newX, newY) && grid[newX][newY] == 0) {
pos.add(new int[] {newX, newY});
grid[newX][newY] = preLength + 1;
}
}
}
return grid[n][n] == 0 ? -1 : grid[n][n];
}
private boolean inGrid(int x, int y) {
return x >= 0 && x <= n && y >= 0 && y <= n;
}