题目描述
在给定的网格中,每个单元格可以有以下三个值之一:
每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。
返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1。
广度优先遍历
腐烂橘子的传播以一种类似广播扩散的形式进行。这里不妨以队列来模拟腐烂橘子的扩散过程,队列中存储新的被感染的橘子,则队列为空时表示扩散停止。此时若网格中仍有新鲜橘子,则表示这些橘子不可达,返回 -1;若全部橘子均为腐烂,则返回扩散次数(可能为 0,即初始情况即为全部腐烂)。
class Solution: def orangesRotting(self, grid: List[List[int]]) -> int: cnt,l,w=0,len(grid),len(grid[0]) arr=[(i,j) for i in range(l) for j in range(w) if grid[i][j]==2] while arr: for t in range(len(arr)): i,j=arr.pop(0) for x,y in [(i-1,j),(i+1,j),(i,j-1),(i,j+1)]: if 0<=x<l and 0<=y<w and grid[x][y]==1: arr.append((x,y)) grid[x][y]=2 if arr: cnt+=1 arr=[(i,j) for i in range(l) for j in range(w) if grid[i][j]==1] return -1 if arr else cnt
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句