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