994. Rotting Oranges
Multi-source map search
class Solution:
def orangesRotting(self, grid: List[List[int]]) -> int:
queue = deque()
n,m = len(grid),len(grid[0])
count, time = 0, -1
dirs = [(1,0),(0,1),(-1,0),(0,-1)]
for i in range(n):
for j in range(m):
if grid[i][j]==1:
count+=1
elif grid[i][j]==2:
queue.append((i,j))
while len(queue)>0:
rotten = []
while len(queue)>0:
rotten.append(queue.popleft())
for orange in rotten:
i,j = orange
for a,b in dirs:
new_i, new_j = i+a, j+b
if 0<=new_i<n and 0<=new_j<m and grid[new_i][new_j]==1:
count-=1
grid[new_i][new_j]=2
queue.append((new_i,new_j))
time+=1
if not count:
return max(time,0)
else:
return -1