美文网首页
1091. 二进制矩阵中的最短路径

1091. 二进制矩阵中的最短路径

作者: Abeants | 来源:发表于2021-11-12 23:36 被阅读0次

    给你一个 n x n 的二进制矩阵 grid 中,返回矩阵中最短 畅通路径 的长度。如果不存在这样的路径,返回 -1 。

    二进制矩阵中的 畅通路径 是一条从 左上角 单元格(即,(0, 0))到 右下角 单元格(即,(n - 1, n - 1))的路径,该路径同时满足下述要求:

    路径途经的所有单元格都的值都是 0 。
    路径中所有相邻的单元格应当在 8 个方向之一 上连通(即,相邻两单元之间彼此不同且共享一条边或者一个角)。
    畅通路径的长度 是该路径途经的单元格总数。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/shortest-path-in-binary-matrix
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    解题思路及方法

    标准的BFS解法框架,就不多说了,详情看这里

    class Solution {
        public static int[][] dirs = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}, {1, 1}, {-1, -1}, {1, -1}, {-1, 1}};
    
        public int shortestPathBinaryMatrix(int[][] grid) {
            int n = grid.length;
            if (grid[0][0] == 1 || grid[n - 1][n - 1] == 1 ) return -1;
    
            // 队列记录路径
            Queue<int[]> road = new LinkedList<>();
            // 起点入队
            road.offer(new int[]{0, 0});
            grid[0][0] = 1;
    
            int step = 1;
            while (!road.isEmpty()) {
                int size = road.size();
                for (int i = 0; i < size; i++) {
                    int[] cur = road.poll();
                    int row = cur[0], cln = cur[1];
                    // 到达终点
                    if (row == n - 1 && cln == n - 1) return step;
                    // 找寻方向
                    for (int j = 0; j < 8; j++) {
                        int nRow = row + dirs[j][0];
                        int nCln = cln + dirs[j][1];
                        // 排除已访问、值为1、过界的点
                        if (nRow < 0 || nRow > n - 1 | nCln < 0 || nCln > n - 1 || grid[nRow][nCln] == 1) continue;
                        // 入队
                        road.offer(new int[]{nRow, nCln});
                        grid[nRow][nCln] = 1;
                    }
                }
                step++;
            }
    
            return -1;
        }
    }
    

    结果如下:

    相关文章

      网友评论

          本文标题:1091. 二进制矩阵中的最短路径

          本文链接:https://www.haomeiwen.com/subject/anrazltx.html