首页 > 分享 > 腐烂的橘子BFS算法解析

腐烂的橘子BFS算法解析

994. 腐烂的橘子

最新推荐文章于 2020-07-06 12:00:01 发布

啊我太菜了 于 2020-04-08 19:54:34 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

#994. 腐烂的橘子

题目难度:简单
题目描述
在这里插入图片描述
解题思路
1、BFS
做完上一道题机器人可以走的格子再来做这个思路就很清晰。
和普通bfs不同的就是,这个增加了时间(即轮次)的概念,因为每一分钟所有腐烂的橘子会同时腐蚀周围的新鲜橘子,所以在遍历时得一次性遍历完同一深度的格子。
具体做法就是先把所有的腐烂橘子入队,轮次可以理解为0,然后一次性把这些句子周围的橘子都遍历完,新被腐蚀的入队,轮次为1;再继续操作,直到队列为空或者没有新鲜橘子了。

public int orangesRotting(int[][] grid) {int round = 0,num = 0; //round表示腐烂的轮数,num保存新鲜橘子的数量int m = grid.length,n = grid[0].length; Queue<Integer> queue = new LinkedList<Integer>();int move[][] = new int[][] {{-1,0},{1,0},{0,-1},{0,1}};//上下左右四个正方向for (int i = 0; i < m; i++) { //找到所有的腐烂橘子并入队for (int j = 0; j < n; j++) {if(2 == grid[i][j]) {queue.offer(i*n + j);//将坐标转换为唯一的索引 }else if(1 == grid[i][j])num++;}}while(num > 0 && !queue.isEmpty()) {round++;int s = queue.size();//队列里面每次保存同一层的所有腐烂橘子,同一层要一起出队腐烂周围的橘子for (int i = 0; i < s; i++) {int code = queue.poll();int x = code/n,y = code%n;for (int j = 0; j < 4; j++) {int new_x = x + move[j][0];int new_y = y + move[j][1];int ncode = new_x*n+new_y;if (new_x >= 0 && new_x < m && new_y >= 0 && new_y < n && 1 == grid[new_x][new_y] ) { //如果符合边界条件并且是新鲜橘子,那么腐烂grid[new_x][new_y] = 2;queue.offer(ncode);num--;}} }} if(num != 0)return -1; elsereturn round; }

1234567891011121314151617181920212223242526272829303132333435363738

提交结果:
在这里插入图片描述

相关知识

算法复杂度解析与实例
利用带花树算法解决一般图的最大匹配
算法的艺术
堪称最好最全的A*算法详解(译文)
橘子花语和象征是什么?橘子有什么花语?
橘子怎么种植方法
从匈牙利算法到带权带花树——详解对偶问题在图匹配上的应用
花了1个月时间,把Python库全部整理出来了,覆盖所有,建议收藏
橘子皮可以做养花的肥料吗
室内盆栽水果橘子,能否存活?,室内盆栽水果橘子,能否存活?

网址: 腐烂的橘子BFS算法解析 https://m.huajiangbk.com/newsview1356877.html

所属分类:花卉
上一篇: leetcode994(c++)
下一篇: 湖南为什么今年的橘子烂得特别多?