二进制矩阵中的最短路径
力扣链接:1091. 二进制矩阵中的最短路径
题目描述
给你一个 n x n 的二进制矩阵 grid 中,返回矩阵中最短 畅通路径 的长度。如果不存在这样的路径,返回 -1 。
二进制矩阵中的 畅通路径 是一条从 左上角 单元格(即,(0, 0))到 右下角 单元格(即,(n - 1, n - 1))的路径,该路径同时满足下述要求:
路径途经的所有单元格都的值都是 0 。
路径中所有相邻的单元格应当在 8 个方向之一 上连通(即,相邻两单元之间彼此不同且共享一条边或者一个角)。
畅通路径的长度 是该路径途经的单元格总数。
示例
Java代码
class Solution {public int shortestPathBinaryMatrix(int[][] grid) {int m = grid.length;int n = grid[0].length;if (grid == null || m == 0 || n == 0) return -1;if(grid[0][0] == 1 || grid[m - 1][n - 1] == 1) return -1;//定义8个方向int[][] dir = {{1,-1}, {1, 0}, {1, 1}, {0,-1},{0,1},{-1,-1},{-1,0},{-1,1}};//BFSQueue<int[]> queue = new LinkedList<>();queue.add(new int[]{0, 0}); //把起点扔进去grid[0][0] = 1; //将起点标记为阻塞int path = 1; //层数while(!queue.isEmpty()) {int size = queue.size();while(size-- > 0) {int[] cur = queue.poll();int x = cur[0];int y = cur[1];//能放进队列里的都是0可以走的点//如果等于终点则返回if(x == m - 1 && y == n - 1) return path;//开始八个方向的判断for(int[] d : dir) {int x1 = x + d[0];int y1 = y + d[1];if(x1 < 0 || x1 >= m || y1 < 0 || y1 >= m || grid[x1][y1] == 1) {continue;}//把数组范围内并且为0不阻塞的放入队列中queue.add(new int[]{x1, y1});grid[x1][y1] = 1;}}path++;}return -1;}
}
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/shortest-path-in-binary-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。