您的位置:首页 > 汽车 > 时评 > 在线优化seo_网络服务公司有哪些_优化seo网站_商丘网络推广外包

在线优化seo_网络服务公司有哪些_优化seo网站_商丘网络推广外包

2025/2/11 21:21:22 来源:https://blog.csdn.net/m0_64995001/article/details/145492610  浏览:    关键词:在线优化seo_网络服务公司有哪些_优化seo网站_商丘网络推广外包
在线优化seo_网络服务公司有哪些_优化seo网站_商丘网络推广外包

标签:广度优先遍历 

难度:中等

在给定的 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 。

思路:详细注解见代码

// 经典广度优先遍历问题
// 解读一下该题的要求:返回所有橘子都被腐烂所需要的分钟数
// sp.一开始就是所有橘子都被腐烂状态,则直接返回0;最后仍剩余橘子不会被腐烂,返回-1
public int orangesRotting(int[][] grid) {int row = grid.length;int col = grid[0].length;int ans = 0; // ans记录结果返回分钟数int count = 0; //count记录新鲜橘子的数量// 广度优先搜索所需要队列,队列里放的是每个格子坐标,因此是int[][]Queue<int[]> queue = new LinkedList<>();//找到初始时所有的腐烂橘子,作为广度优先搜索的一层for(int i = 0; i < row; i++){for(int j = 0; j < col; j++){if(grid[i][j] == 1)count++;else if(grid[i][j] == 2)queue.offer(new int[]{i, j});}}// 一开始就所有都是腐蚀状态,则直接返回0if(count == 0)return 0;// 四个方向广度优先遍历while(!queue.isEmpty()){if(count == 0)return ans; //没有新鲜橘子,返回结果ans++; //每一轮搜索分钟数加一int size = queue.size();for(int i = 0; i < size; i++){int[] pair = queue.remove();int m = pair[0];int n = pair[1];if(m > 0 && grid[m - 1][n] == 1){count--;queue.offer(new int[]{m - 1, n});grid[m - 1][n] = 2;}if(m + 1 < row && grid[m + 1][n] == 1){count--;queue.offer(new int[]{m + 1, n});grid[m + 1][n] = 2;}if(n > 0 && grid[m][n - 1] == 1){count--;queue.offer(new int[]{m, n - 1});grid[m][n - 1] = 2;}if(n + 1 < col && grid[m][n + 1] == 1){count--;queue.offer(new int[]{m, n + 1});grid[m][n + 1] = 2;}}}// 有剩余橘子没被腐蚀,返回-1return -1;}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com