当前位置: 首页 > news >正文

OJ练习第116题——二进制矩阵中的最短路径(BFS)

二进制矩阵中的最短路径

力扣链接: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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

http://www.lryc.cn/news/89103.html

相关文章:

  • 2023上半年软件设计师真题评析
  • (汇编) 基于VS的x86汇编基础指令
  • 算法Day16 | 104.二叉树的最大深度,559.n叉树的最大深度, 111.二叉树的最小深度,222.完全二叉树的节点个数
  • java设计模式之责任链设计模式的前世今生
  • 是面试官放水,还是公司太缺人了?华为原来这么容易就进了...
  • PLC/DCS系统常见的干扰现象及判断方法
  • c++ 11标准模板(STL) std::map(四)
  • 6.开源非对称加密算法SM2实现
  • Toolformer and Tool Learning(LLMs如何使用工具)
  • 029:Mapbox GL绘制铁路黑白交替的线段
  • 结对编程 --- 大部分程序员喜欢的编程方式
  • kubernetes-informer机制
  • LeetCode 2451. Odd String Difference【字符串,哈希表】简单
  • 切片工具tippecanoe的全网最详细的解释
  • Linux系统初始化命令的备忘单,Linux运维工程师收藏!
  • 五月最近一次面试,被阿里P8测开虐惨了...
  • 工业机器视觉缺陷检测工作小结
  • 技术笔记:默默耕耘,赢得铁粉的秘密策略!
  • 回收站中怎么找回误删除的文件?这几种方法很实用
  • Gateway网关参数进行验签POST 包含requestbody 请求体封装
  • 【Netty】字节缓冲区 ByteBuf (六)(上)
  • Python - 面向对象编程 - 实例方法、静态方法、类方法
  • 性能测试——基本性能监控系统使用
  • JavaCollection集合
  • C++中string的用法
  • 目标检测YOLO实战应用案例100讲-基于深度学习的交通场景多尺度目标检测算法研究与应用
  • 面试:vue事件绑定修饰符
  • 优思学院|从0到1,认识精益生产管理
  • HashSet创建String类型的数据
  • 真会玩:莫言用ChatGPT为余华写了一篇获奖词