994. 腐烂的橘子leetcode

在这里插入图片描述

题解

前面的实现方法不是很普遍,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

在这里插入图片描述

发布了314 篇原创文章 · 获赞 23 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_39289876/article/details/104843618