LC 速查

HOT 100索引 › B9 图论 Graph

LC 994腐烂的橘子Rotting Oranges 中等

网格中 0 为空格、1 为新鲜橘子、2 为腐烂橘子,腐烂每分钟向四方向扩散一格,求全部腐烂所需分钟数,无法全烂返回 -1。

思路 多源 BFS:所有腐烂橘子同时入队作起点,逐层扩散并递减新鲜计数,结束时看新鲜数是否为 0。O(mn)。

class Solution:
    def orangesRotting(self, grid: List[List[int]]) -> int:
        m, n = len(grid), len(grid[0])
        q = deque()
        fresh = 0
        for i in range(m):
            for j in range(n):
                if grid[i][j] == 2:
                    q.append((i, j))
                elif grid[i][j] == 1:
                    fresh += 1
        ans = 0
        while q and fresh:
            ans += 1
            for _ in range(len(q)):
                i, j = q.popleft()
                for x, y in ((i+1, j), (i-1, j),
                             (i, j+1), (i, j-1)):
                    if (0 <= x < m and 0 <= y < n
                            and grid[x][y] == 1):
                        fresh -= 1
                        grid[x][y] = 2
                        q.append((x, y))
        return ans if fresh == 0 else -1
← 上一题 岛屿数量课程表 下一题 →