目录

  • 1.题目
  • 2.思路
  • 3.代码实现(Java)

1.题目

在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一:

  • 值 0 代表空单元格;
  • 值 1 代表新鲜橘子;
  • 值 2 代表腐烂的橘子。
    每分钟,腐烂的橘子周围 4 个方向上相邻 的新鲜橘子都会腐烂。返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1。

示例 1:

输入:grid = [[2,1,1],[1,1,0],[0,1,1]]
输出:4

示例 2:
输入:grid = [[2,1,1],[0,1,1],[1,0,1]]
输出:-1
解释:左下角的橘子(第 2 行, 第 0 列)永远不会腐烂,因为腐烂只会发生在 4 个正向上。

示例 3:
输入:grid = [[0,2]]
输出:0
解释:因为 0 分钟时已经没有新鲜橘子了,所以答案就是 0。

提示:
m == grid.length
n == grid[i].length
1 <= m, n <= 10
grid[i][j] 仅为 0、1 或 2

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/rotting-oranges

2.思路

(1)多源 BFS
思路参考本题官方题解。

3.代码实现(Java)

//思路1————多源 BFS
class Solution {int[][] dirs = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};public int orangesRotting(int[][] grid) {int m = grid.length;int n = grid[0].length;Queue<Integer> queue = new ArrayDeque<>();//存储橘子腐烂所需要的时间Map<Integer, Integer> depthMap = new HashMap<>();for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (grid[i][j] == 2) {int code = i * n + j;queue.offer(code);depthMap.put(code, 0);}}}// res 记录单元格中没有新鲜橘子为止所必须经过的最小分钟数int res = 0;while (!queue.isEmpty()) {int code = queue.poll();int i = code / n;int j = code % n;for (int[] dir : dirs) {int ni = i + dir[0];int nj = j + dir[1];if (ni >= 0 && ni < m && nj >= 0 && nj < n && grid[ni][nj] == 1) {grid[ni][nj] = 2;int ncode = ni * n + nj;queue.offer(ncode);depthMap.put(ncode, depthMap.get(code) + 1);res = depthMap.get(ncode);}}}//判断网格中是否还有新鲜橘子,如果有则返回 -1for (int[] row : grid) {for (int v : row) {if (v == 1) {return -1;}}}return res;}
}

LeetCode_多源 BFS_中等_994.腐烂的橘子相关推荐

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

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

  2. 文巾解题 994. 腐烂的橘子

    1 题目描述 2 解题思路 2.1 多源广搜 使用广搜的思想,但是和一般的广搜不同,这里一开始的队列不是一个元素,而是一开始就腐烂的所有橘子的坐标. 同时我们队列里面的每一个元素是一个三元组,分别是腐 ...

  3. 【广度优先搜索】leetcode 994. 腐烂的橘子

    994. 腐烂的橘子 文章目录 题目描述 示例1: 示例2: 示例3: 提示 方法:多源广度优先搜索 解题思路 代码 复杂度分析 题目描述 在给定的 m x n 网格 grid 中,每个单元格可以有以 ...

  4. Leetcode广度优先搜索笔记2 腐烂的橘子

    994. 腐烂的橘子:带有变量控制的矩阵中的广度优先搜索 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的 ...

  5. leetcode 994:腐烂的橘子 java

    994. 腐烂的橘子 - 力扣(LeetCode) (leetcode-cn.com) 多源广度优先搜索,初始的所有的腐烂橘子,等价于广度优先搜索的同一层,然后对每一层进行搜索: class Solu ...

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

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

  7. leetcode 994.腐烂的橘子

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

  8. 994. 腐烂的橘子

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

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

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

最新文章

  1. Linux通过XAMPP集成软件包搭建LAMPP环境
  2. Python 网易新闻热点新闻爬虫
  3. opengl加载显示3D模型STL类型文件
  4. SAP Cloud Application Programming 介绍(2021 更新版)
  5. Holedox Moving
  6. MySQL LIST分区(转载)
  7. vue.js语法和常用指令
  8. 【LaTeX笔记1】最全命令+符号
  9. 【MMD】MikuMikuDance入门必备网址整理
  10. 前端车牌识别SDK算法及原理
  11. 基于ricequant的lstm时间序列股价预测(pytorch)
  12. 宇视手机客户端共享/分享设备配置操作
  13. EXCEL使用技巧大全:输入的技巧
  14. matlab 三维图像 叠加,利用 Matlab构建“波的叠加”图样
  15. ArcMap进行线符号制作
  16. 【完整源码】如何在BSC部署多代层级分红
  17. 使用Outlook 2007待办事项栏
  18. python使用xlwings库操作Excel常见操作
  19. 关于网络广告的的概念
  20. 真正厉害的人,都在延迟满足

热门文章

  1. java get请求url拼接参数_Java 基础知识复习
  2. matlab 函数pdf怎么用_办公小技巧:图片怎么转换成pdf格式?这个转换方法超好用,用过的都说好...
  3. NS4115 1A 内置功率管 LED 恒流驱动器
  4. 实现医生工作站的辅助检查功能的代码(七)
  5. 对抗样本生成的PGD和CW方法
  6. MIPS 架构体系基础知识
  7. 7.Bean的自动装配
  8. 数字孪生技术,可视化系统?
  9. 关于嵌入式系统开发工程师相关问题解答
  10. 一款学生党实测好用的美赛论文翻译软件推荐