July 31, 2022

1091. Shortest Path in Binary Matrix

1091. Shortest Path in Binary Matrix

BFS Shortest Path.

class Solution {
    public int shortestPathBinaryMatrix(int[][] grid) {
        if (grid[0][0] != 0 || grid[grid.length - 1][grid[0].length - 1] != 0) {
            return -1;
        }
        Queue<int[]> queue = new LinkedList<>();
        int[][] dirs = `{`{-1, 0}, {1, 0}, {0, -1}, {0, 1}, {-1, 1}, {1, -1}, {-1, -1}, {1, 1}`}`;
        queue.offer(new int[]{0, 0});
        grid[0][0] = 1;
        while (!queue.isEmpty()) {
            int[] cur = queue.poll();
            int distance = grid[cur[0]][cur[1]];
            if (cur[0] == grid.length - 1 && cur[1] == grid[0].length - 1) {
                    return distance;
            }
            for (int[] dir : dirs) {
                int x = cur[0] + dir[0];
                int y = cur[1] + dir[1];
                if (x == grid.length - 1 && y == grid[0].length - 1) {
                    return distance + 1;
                }
                if (x >= 0 && y >= 0 && 
                    x <= grid.length - 1 && y <= grid[0].length - 1 &&
                    grid[x][y] == 0) {
                    queue.offer(new int[]{x, y});
                    grid[x][y] = distance + 1;
                }
            }
        }
        return -1;
    }
}
comments powered by Disqus