利用队列先记录所有腐烂的橘子的位置和当前的时间,然后从队列中取出橘子位置和时间,把四周的橘子也腐烂并加入队列,直到队列没元素,最后循环遍历一下差错判断一下并输出时间
#python
class Solution:
def orangesRotting(self, grid: List[List[int]]) -> int:
h,l=len(grid),len(grid[0])
q=collections.deque()
for i,row in enumerate(grid):
for j,k in enumerate(row):
if k==2:
q.append((i,j,0))
def ab(i,j):
for a,b in ((i-1,j),(i+1,j),(i,j-1),(i,j+1)):
if 0<=a<h and 0<=b<l:
yield a,b
t=0
while q:
i,j,t=q.popleft()
for a,b in ab(i,j):
if grid[a][b]==1:
grid[a][b]=2
q.append((a,b,t+1))
if any(1 in i for i in grid):
return -1
return t