题解
前面的实现方法不是很普遍,BFS 的标准实现还是用队列。
队列实现 BFS 的方法相对固定,大致分三步:
1初始化队列;
2最开始的坏橘子全部入队,具体是橘子的坐标和 timetime;
3循环:当队列不为空时,先弹出队首元素,然后将这个元素能够腐烂的橘子全部入队
class Solution:
def orangesRotting(self, grid: List[List[int]]) -> int:
time=0
boundary_r=len(grid)
boundary_c=len(grid[0])
queue=[]
directions = [(1,0), (-1,0),(0,1),(0,-1)]
for r,row in enumerate(grid):
for c,val in enumerate(row):
if val==2:
queue.append((r,c,0))
while queue:
i, j, time = queue.pop(0)
for di, dj in directions:
if 0 <= i + di < boundary_r and 0 <= j + dj < boundary_c and grid[i + di][j + dj] == 1:
grid[i + di][j + dj] = 2
queue.append((i + di, j + dj, time + 1))
for row in grid:
if 1 in row:
return -1
return time