1. 题目

在一个 N × N 的方形网格中,每个单元格有两种状态:空(0)或者阻塞(1)。

一条从左上角到右下角、长度为 k 的畅通路径,
由满足下述条件的单元格 C_1, C_2, ..., C_k 组成:相邻单元格 C_i 和 C_{i+1} 在八个方向之一上连通
(此时,C_i 和 C_{i+1} 不同且共享边或角)
C_1 位于 (0, 0)(即,值为 grid[0][0])
C_k 位于 (N-1, N-1)(即,值为 grid[N-1][N-1])
如果 C_i 位于 (r, c),则 grid[r][c] 为空(即,grid[r][c] == 0)
返回这条从左上角到右下角的最短畅通路径的长度。
如果不存在这样的路径,返回 -1 。提示:
1 <= grid.length == grid[0].length <= 100
grid[i][j] 为 0 或 1

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

2. 解题

  • 8个方向可走,题目意思是路径上点的个数,step初始为1
class Solution {public:int shortestPathBinaryMatrix(vector<vector<int>>& grid) {int m = grid.size(), n = grid[0].size(), i, j, x, y, k, step = 1, size;if(grid[0][0]==1 || grid[m-1][n-1]==1)return -1;vector<vector<int>> dir = {{1,0},{0,1},{0,-1},{-1,0},{1,1},{-1,-1},{1,-1},{-1,1}};queue<vector<int>> q;q.push({0,0});//坐标x,ygrid[0][0] = 1;//访问过while(!q.empty()){size = q.size();while(size--){i = q.front()[0];j = q.front()[1];if(i==m-1 && j==n-1)return step;q.pop();for(k = 0; k < 8; ++k){x = i + dir[k][0];y = j + dir[k][1];if(x>=0 && x<m && y>=0 && y<n && grid[x][y]==0){q.push({x,y});grid[x][y] = 1;//访问过了}}}step++;}return -1;}
};

208 ms 27.1 MB

LeetCode 1091. 二进制矩阵中的最短路径(BFS)相关推荐

  1. LeetCode 1091 二进制矩阵中的最短路径问题[BFS 队列] HERODING的LeetCode之路

    解题思路: 使用广度优先遍历的方法,可以遍历下一步能走的位置,一般用到广度优先就离不开队列,队列存储着当前轮次能够走的位置,每一轮都要将能走的长度++,如果队列无元素,说明无处可走,此时没有到终点就直 ...

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

    在一个 N × N 的方形网格中,每个单元格有两种状态:空(0)或者阻塞(1). 一条从左上角到右下角.长度为 k 的畅通路径,由满足下述条件的单元格 C_1, C_2, ..., C_k 组成: 相 ...

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

    题目描述 在一个 N × N 的方形网格中,每个单元格有两种状态:空(0)或者阻塞(1). 一条从左上角到右下角.长度为 k 的畅通路径,由满足下述条件的单元格 C_1, C_2, ..., C_k ...

  4. C++算法学习(力扣:1091. 二进制矩阵中的最短路径)

    在一个 N × N 的方形网格中,每个单元格有两种状态:空(0)或者阻塞(1). 一条从左上角到右下角.长度为 k 的畅通路径,由满足下述条件的单元格 C_1, C_2, -, C_k 组成: 相邻单 ...

  5. Leetcode1091_二进制矩阵中的最短路径(Java+BFS解法)

    Leetcode1091题:二进制矩阵中的最短路径(Java+BFS解法) 文章目录 Leetcode1091题:二进制矩阵中的最短路径(Java+BFS解法) 1.题目链接 2.解题思想 3.Jav ...

  6. leetcode1091. 二进制矩阵中的最短路径(bfs)

    在一个 N × N 的方形网格中,每个单元格有两种状态:空(0)或者阻塞(1).一条从左上角到右下角.长度为 k 的畅通路径,由满足下述条件的单元格 C_1, C_2, ..., C_k 组成:相邻单 ...

  7. `Algorithm-Solution` `LeetCode` 6305. 二进制矩阵中翻转最多一次使路径不连通

    Link Solution Simplified: + If there are two paths s→a1→a2...→ts \to a1 \to a2 ... \to ts→a1→a2...→t ...

  8. LeetCode 378. 有序矩阵中第K小的元素(二分查找)

    文章目录 1. 题目 2. 解题 2.1 暴力法 2.2 二分查找 1. 题目 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素. 请注意,它是排序后的第k小元素,而 ...

  9. LeetCode题解:矩阵中战斗力最弱的 K 行

    矩阵中战斗力最弱的 K 行 一.题目 给你一个大小为 m * n 的矩阵 mat,矩阵由若干军人和平民组成,分别用 1 和 0 表示. 请你返回矩阵中战斗力最弱的 k 行的索引,按从最弱到最强排序. ...

最新文章

  1. bootcmd 和 bootargs 环境变量
  2. 经典C语言程序100例之二二
  3. RHCE 学习笔记(16) - KickStart
  4. vue中使用FullCalendar日历组件
  5. 鸿蒙公测第二期报名地址,鸿蒙2.0第二期公测报名入口及参加方法
  6. 莫比乌斯函数与莫比乌斯反演
  7. Vmware中RedHat命令行和图形界面切换
  8. DC概论三之setup time 与 hold time 之二
  9. 关于jmeter TPS解读
  10. 2007年度中文博客百条经典语录
  11. web技术分享| 前端秘籍之“易容”术
  12. 类,多态,抽象类,接口
  13. 第五人格显示服务器维护中请稍后登录怎么办,第五人格账号登录失败怎么办
  14. 年终奖变期权,曝字节跳动将开启员工期权兑换
  15. 中国现在开源系统cms 论坛排行榜
  16. 企业非法集资风险预测
  17. MailKit和MimeKit 收发邮件
  18. 根据经纬度,随机生成经纬度
  19. TiDB Lightning 常见问题
  20. matlab实现MSK调制解调

热门文章

  1. pycharm之no python interpreter configured for project的解决办法
  2. 机器学习中各类算法的优缺点比较
  3. C语言扫地雷游戏的题目简介,C语言程序设计课程设计(论文)-扫地雷游戏.doc...
  4. Django Model设计详解
  5. kail中tools的安装和第一个php学习笔记
  6. 字符数组,字符串、数字转化
  7. grpc php 返回值过大,使用grpc实现php、java、go三方互调
  8. matlab里数组的赋值,arrays – MATLAB结构赋值数组
  9. LeetCode371——Sum of Two Integers(不用+)
  10. centOS 6 和centOS 7 防火墙指令