题目:

解法:

//Java
class Solution {public int orangesRotting(int[][] grid) {int m=grid.length,n=grid[0].length;Queue<int[]> queue = new LinkedList<>();//count表示新鲜橘子数量int count = 0;//遍历数组,找出所有新鲜橘子和腐烂橘子for(int i=0;i<m;i++){for(int j=0;j<n;j++){//新鲜橘子计数if(grid[i][j]==1){count++;//腐烂橘子放进队列}else if(grid[i][j]==2){//缓存腐烂橘子坐标queue.add(new int[]{i,j});}}}//round表示腐烂轮数,或者分钟数int round = 0;//如果有新鲜橘子,并且 队列 不为空//直到上下左右都触及边界 或者 被感染的橘子已经遍历完while(count > 0 && !queue.isEmpty()){//BFS层级+1round++;//拿到当前层级的腐烂橘子数量,因为每个层级会更新队列int k =queue.size();//遍历当前层级的队列for(int i=0;i<k;i++){//踢出队列(拿出一个腐烂的橘子)int[] orange = queue.poll();//恢复橘子坐标int r=orange[0];int c=orange[1];//上邻点 判断是否边界 并且上方是否是健康橘子if(r-1>=0 && grid[r-1][c] == 1){//感染它grid[r-1][c] = 2;//好橘子-1count--;//把被感染的橘子放进队列 并缓存queue.add(new int[]{r-1,c});}//下邻点if(r+1<m && grid[r+1][c]==1){//感染它grid[r+1][c] =2;count--;queue.add(new int[]{r+1,c});}//左邻点if(c-1>=0 && grid[r][c-1]==1){//感染它grid[r][c-1] = 2;count--;queue.add(new int[]{r,c-1});}//右邻点if(c+1<n && grid[r][c+1]==1){//感染它grid[r][c+1] =2;count--;queue.add(new int[]{r,c+1});}} }//如果此时还有健康的橘子//返回-1//否则 返回层级if(count > 0){return -1;}else{return round;} }
}

注意
BFS 使用队列,把每个还没有搜索到的点依次放入队列,然后再弹出队列的头部元素当做当前遍历点。BFS 总共有两个模板:

1、如果不需要确定当前遍历到了哪一层,BFS 模板如下。

while queue 不空:cur = queue.pop()for 节点 in cur的所有相邻节点:if 该节点有效且未访问过:queue.push(该节点)

2、如果要确定当前遍历到了哪一层,BFS 模板如下。
这里增加了 level 表示当前遍历到二叉树中的哪一层了,也可以理解为在一个图中,现在已经走了多少步了。size 表示在当前遍历层有多少个元素,也就是队列中的元素数,我们把这些元素一次性遍历完,即把当前层的所有元素都向外走了一步。

level = 0
while queue 不空:size = queue.size()while (size --) {cur = queue.pop()for 节点 in cur的所有相邻节点:if 该节点有效且未被访问过:queue.push(该节点)}level ++;

参考:
https://leetcode-cn.com/problems/01-matrix/solution/tao-lu-da-jie-mi-gao-dong-ti-mu-kao-cha-shi-yao-2/

leetcode:BFS/DFS--腐烂的橘子相关推荐

  1. Leetcode 994:腐烂的橘子(超详细的解法!!!)

    在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂. 返回 ...

  2. (力扣)LeetCode994. 腐烂的橘子(C语言)

    一.环境说明 本文是 LeetCode 994题 : 腐烂的橘子,使用c语言实现 模拟广度优先遍历. 测试环境:Visual Studio 2019 二.代码展示 typedef struct que ...

  3. 15.使用一样的BFS方法(代码几乎一模一样)解决多道LeetCode题目--542题(01矩阵)1765题(地图中的最高点)994腐烂的橘子

    一.综述 本文总结自己刷LeetCode中遇到的使用BFS方法解决相同类型的题目.(代码几乎是一模一样) 二.01矩阵(LeetCode第542题) class Solution {int[][] d ...

  4. LeetCode 994. 腐烂的橘子(图的BFS)

    1. 题目 在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会 ...

  5. 994. 腐烂的橘子(Leetcode)(多源BFS)

    994. 腐烂的橘子 难度简单85 在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,任何与腐烂的橘子(在 4 个正方 ...

  6. [JavaScript 刷题] 搜索 - 腐烂的橘子, leetcode 994

    [JavaScript 刷题] 搜索 - 腐烂的橘子, leetcode 994 唉--之前写过笔记总结的问题,还是又卡住了. 自挂东南枝-- 题目地址: Rotting Oranges 题目如下: ...

  7. leetcode994. 腐烂的橘子(bfs)

    在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂. 返回 ...

  8. LeetCode 1263. 推箱子(BFS+DFS / 自定义哈希set)

    文章目录 1. 题目 2. 解题 2.1 超时解 2.2 BFS + DFS 1. 题目 「推箱子」是一款风靡全球的益智小游戏,玩家需要将箱子推到仓库中的目标位置. 游戏地图用大小为 n * m 的网 ...

  9. LeetCode 1034. 边框着色(BFS/DFS)

    文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 给出一个二维整数网格 grid,网格中的每个值表示该位置处的网格块的颜色. 只有当两个网格块的颜色相同,而且在四个方向中任 ...

最新文章

  1. 使用markdown编辑evernote(印象笔记)的常用方法汇总
  2. Android设置布局位置五等分,五等分划分屏幕
  3. 第19天学习Java的笔记-String字符串
  4. JS正则表达式详解(转)
  5. [Jarvis OJ - PWN]——Tell Me Something
  6. 阿里云部署django项目流程【centos7+python3+mysql】
  7. Python 分离路径和文件名,分离文件名和后缀
  8. httpclient依赖_.NetCore 3.1高性能微服务架构:封装调用外部服务的接口方法HttpClient客户端思路分析...
  9. Oracle ——概述 CBO 优化器
  10. OpenJudge 8782 乘积最大——S.B.S
  11. Map<String, Object> map=new HashMap<String, Object>();
  12. -Visual Studio 2010- IntelliTrace(智能跟踪)优化c盘
  13. vim ,vi总是卡死,终于找到原因了。
  14. 保姆级教程,手把手教你制作数据分析报告
  15. MATLAB胸部CT图像中肺部提取,轮廓跟踪技术勾画出肺部轮廓
  16. 华三服务器如何修改默认ip,H3C路由器默认登录入口 192.168.124.1 设置步骤
  17. 高动态范围(HDR)渲染——最新中文手册
  18. Rasa课程、Rasa培训、Rasa面试系列之 Rasa幕后英雄系列-机器学习研究员 Johannes
  19. 鼠标划过显示鼠标移出隐藏效果
  20. HIT 大物实验 数据处理代码

热门文章

  1. 【matplotlib】画图基本函数 pyplot.barh 画水平柱状图
  2. 路径中 / ./ ../ 分别代表什么
  3. Scrapy豆瓣爬虫 爬取用户以及用户关注关系
  4. 完备性的定义(ZZ)
  5. Android面试题之动画+事件处理篇
  6. SaaSBase:什么是艾盟赢销SCRM?
  7. 华为手机 从服务器获取安装包信息,华为openGauss 获取并校验安装包
  8. TwinCAT3 与 SMC(EX600总线模块)通讯
  9. 13代酷睿移动端处理器:HX、H、P和U系列区别是什么?
  10. 大数据学习总结(2021版)---Mysql基础