第九天,两个广度优先搜索的算法题,先来看第一个

乍一看没有头绪,那我们先简化一下题目,假如只有一个0,那问题是不是很简单,以唯一的0作为中心做广度优先搜索,设个变量depth,每搜索一层,depth+1。简单解决。

那么现在有多个0,好了,有点复杂,但是换一下思维,把多个0看成“超级0”辐射而来的就轻松解决了,现在题目变成这样:有一个超级0,其他都是1,算出每个1到超级0的距离。但是超级0做广度优先搜索的第一层辐射创造出了多个0,逻辑关系不需要写,现在需要笔者继续完成剩下的广度优先搜索。好的,太简单了,将多个0放进队列,继续做广度优先搜索不OK了吗?看代码

class Solution {static int[][] dirs = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};public int[][] updateMatrix(int[][] matrix) {//新建大小一样的矩阵int m = matrix.length, n = matrix[0].length;int[][] dist = new int[m][n];//新建boolean类型数组标记 节点是否访问过boolean[][] seen = new boolean[m][n];//新建队列放入节点Queue<int[]> queue = new LinkedList<int[]>();// 将所有的 0 添加进初始队列中for (int i = 0; i < m; ++i) {for (int j = 0; j < n; ++j) {if (matrix[i][j] == 0) {queue.offer(new int[]{i, j});seen[i][j] = true;}}}// 广度优先搜索while (!queue.isEmpty()) {int[] cell = queue.poll();int i = cell[0], j = cell[1];for (int d = 0; d < 4; ++d) {int ni = i + dirs[d][0];int nj = j + dirs[d][1];if (ni >= 0 && ni < m && nj >= 0 && nj < n && !seen[ni][nj]) {dist[ni][nj] = dist[i][j] + 1;queue.offer(new int[]{ni, nj});seen[ni][nj] = true;}}}return dist;}
}

第二题 腐烂的橘子

刚开始看到这题目,觉得和第一题很相似,只不过最后多个判断有没有全部腐烂而已,见代码

class Solution {int[] dx = new int[]{1,0,0,-1};int[] dy = new int[]{0,1,-1,0};/*** bfs* 找到所有腐烂的橘子加入队列中, 并统计新鲜水果数量* 从腐烂橘子位置开始, dfs迭代, 完成*/public int orangesRotting(int[][] grid) {int m = grid.length;int n = grid[0].length;int time = 0;//找到所有腐烂的橘子加入队列中, 并统计新鲜水果数量int normalCount = 0;Queue<int[]> queue = new LinkedList<>();for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (grid[i][j] == 2){queue.add(new int[]{i, j});} else if(grid[i][j] == 1){normalCount++;}}}//没有烂橘子if (normalCount == 0){return 0;}//猎杀时刻while (!queue.isEmpty()){int size = queue.size();for (int i = 0; i < size; i++) {int[] point = queue.poll();int row = point[0];int column = point[1];for (int j = 0; j < dx.length; j++) {int x = row + dx[j];int y = column + dy[j];if (x >= 0 && x < m && y >= 0 && y < n && grid[x][y] == 1){//好橘子烂掉grid[x][y] = 2;normalCount--;queue.add(new int[]{x,y});}}}time++;}return normalCount == 0 ? time -1 : -1;}
}

Leecode第九天,广度优先搜索之矩阵,腐烂的橘子相关推荐

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

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

  2. 【BFS 广度优先搜索】详解感染橘子最短时间问题

    一.题目描述 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,腐烂的橘子 周围 4 个方向 ...

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

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

  4. 腐烂的橘子(广度优先搜索)(考虑同时搜索)

    题目994. 腐烂的橘子 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,腐烂的橘子 周围 ...

  5. C++编程-腐烂的橘子-广度优先搜索

    题目: 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,腐烂的橘子 周围 4 个方向上相邻 ...

  6. 广度优先搜索c语言矩阵,算法7-6:图的遍历——广度优先搜索 (C++代码)

    解题思路: 首先要开一个二维数组储存邻接矩阵,一般的方法是开一个足够大的数组,例如这道题是n不大于50,不过这样做会造成空间不必要的浪费.因此手动分配空间会更为合理.一种方法是用malloc,对应销毁 ...

  7. 单源广度优先搜索 (leetcode经典例题 C++实现)

    文章目录 01矩阵 地图分析 腐烂的橘子 深度优先搜索与广度优先搜索前情回顾: 深度搜索dfs与广度搜索bfs算法总结(c++ 例题) 本节是广度优先搜索的进阶: 01矩阵 传送门: https:// ...

  8. 力扣入门级广度优先搜索/遍历刷题小结

    刷这些题时死掉的脑细胞是我当年在<线性代数>和<概率论与数理统计>课上没学明白时苟活下来的( 这几题基本是抄作业了,但我发现官方题解写的也很绕,都不知道是我天然看到这类题就头晕 ...

  9. 广度优先搜索BFS进阶(一):多源BFS、优先队列BFS、双端队列BFS

    一.多源BFS 在上一篇博客:广度优先搜索BFS基础中,我们接触到的BFS均是单起点(单源)的,但是对于某一些问题,其有多个起点,此类问题我们称为多源BFS问题.先思考下面一道例题: 1.腐烂的橘子 ...

最新文章

  1. English trip M1 - AC6 How to make salad? Teacher:Patrick
  2. 【AutoML】强化学习如何用于自动模型设计(NAS)与优化?
  3. egret:什么是脏矩形
  4. RMQ求区间最值 nlog(n)
  5. 项目助理这个工作怎么样_分析微信清理僵尸粉这个项目怎么样?
  6. UVA516 POJ1365 LA5533 ZOJ1261 Prime Land【欧拉筛法】
  7. 在vpc 2007上安装 ubuntu8.04-desktop(多图解)(转)
  8. overflow解决float浮动后高度自适应问题
  9. 网络掘金者信息采集软件行业应用
  10. 可以在树莓派上使用的交互式抠图软件
  11. win7远程桌面连接问题解决方案
  12. 微信协议简单调研笔记 (2)
  13. 工作中遇到的发送报警短信的流程图设计
  14. 微博立场检测 60分Baseline
  15. 普通人如何在5年内赚到1000万
  16. 全国计算机等级考试Java上机真题
  17. SLAM——ORB-SLAM3代码分析(七)Converter
  18. 信息安全技术之08之设备与环境安全测试卷
  19. 金山发布毒霸V及网镖V新品 坚持高定价策略
  20. 爬取CSDN官方博客粉丝中码龄20年以上的用户数量

热门文章

  1. 完整的iOS直播app
  2. xposed框架的检测和反制
  3. 笔记本linux蓝牙驱动怎么安装程序,如何安装蓝牙设备的驱动程序
  4. 怎么关闭自动启动的屏幕键盘
  5. 最安全的微信群管理工具推荐
  6. java 绘制动态的图形
  7. web前端数据表格有合并项的一种简单实现方法
  8. 008.环形链表 II-双指针
  9. Java精准地图坐标转换 高德 百度 谷歌 腾讯 高德 批量转换工具类达到项目生产精度
  10. k8s 1.17.3 二进制部署