烂橘子题目来源:[https://leetcode-cn.com/probl...](https://leetcode-cn.com/probl...)题目在给定的在网格中,每个单元格可以具有三个值之一:值为0表示空单元格;新鲜橙子的值为1;腐烂的橙子的值为2。每分钟,任何与腐烂的橙子(在4个正方向)相邻的新鲜橙子都会腐烂。返回在单元格中没有新鲜橙子之前必须经过的最小分钟数。如果不可能,返回-1。示例1:[正在站点外上传图片...(image-d1670e-1583324519567)]输入:[[2,1,1],[1,1,0],[0,1,1]]输出:4示例2:输入:[[2,1,1],[0,1,1],[1,0,1]]输出:-1解释:左下角的橙色(第2行,第0列)永远不会腐烂,因为腐烂只发生在4个正面。示例3:输入:[[0,2]]输出:0解释:由于在第0分钟没有新鲜橙子,所以答案为0。提示:1<=grid.length<=101<=grid[0]。length<=10grid[i][j]isonly0,1or2解题思路:广度优先搜索+队列;先找出rot的橙子加入队列queue;当队列(注:只允许烂橙子入队)不为空出队(这里弹出第一个元素),如题所说,与烂橙子一样(在4中正方向)相邻的新鲜橙子先标记为2(即标记为烂橙子),即grid[x+dx][y+dy]=2,其中x和y代表烂橙子的当前位置,dx,dy表示相邻四个方向的相对距离。分钟代表持续时间。当腐烂的橙子扩散污染新鲜的橙子时,给这个级别加1分钟,以这个时间作为这个级别变成烂橙子的持续时间,入队到队列中。根据题意,当队列为空时,还需要检查矩阵grid中是否有新鲜橙子:如果有,则返回-1;否则返回分钟。代码实现类解决方案:deforangesRotting(self,grid:List[List[int]])->int:row,col,minute=len(grid),len(grid[0]),0directions=[(0,-1),(1,0),(0,1),(-1,0)]queue=[]forxinrange(row):foryinrange(col):ifgrid[x][y]==2:queue.append((x,y,minute))whilequeue:x,y,minute=queue.pop(0)fordx,dyindirections:if0<=x+dx
