1def oranges_rotting(grid):
2 q = []; fresh = 0
3 for r in range(len(grid)):
4 for c in range(len(grid[0])):
5 if grid[r][c] == 2: q.append((r, c))
6 elif grid[r][c] == 1: fresh += 1
7
8 minutes = 0
9 while q and fresh > 0:
10 minutes += 1
11 for _ in range(len(q)):
12 r, c = q.pop(0)
13 for dr, dc in [(1,0),(-1,0),(0,1),(0,-1)]:
14 nr, nc = r + dr, c + dc
15 if 0 <= nr < len(grid) and 0 <= nc < len(grid[0]) and grid[nr][nc] == 1:
16 grid[nr][nc] = 2; fresh -= 1; q.append((nr, nc))
17
18 return minutes if fresh == 0 else -1