994. 腐烂的橘子 - 力扣(LeetCode)
from collections import deque
class Solution:def orangesRotting(self, grid: List[List[int]]) -> int:if not grid:return -1rows, cols = len(grid), len(grid[0])queue = deque()fresh_count = 0# 遍历网格,找到所有腐烂橘子并统计新鲜橘子数量for r in range(rows):for c in range(cols):if grid[r][c] == 2:queue.append((r, c, 0)) # (行, 列, 时间)elif grid[r][c] == 1:fresh_count += 1# 方向数组,表示四个方向的移动directions = [(-1, 0), (1, 0), (0, -1), (0, 1)]minutes = 0# BFS 传播while queue:r, c, time = queue.popleft()minutes = max(minutes, time)for dr, dc in directions:nr, nc = r + dr, c + dcif 0 <= nr < rows and 0 <= nc < cols and grid[nr][nc] == 1:grid[nr][nc] = 2 # 让新鲜橘子腐烂fresh_count -= 1 # 新鲜橘子数量减少queue.append((nr, nc, time + 1))return minutes if fresh_count == 0 else -1