Rotting Oranges
BFS
Last updated
BFS
Last updated
from collections import deque
class Solution:
def orangesRotting(self, grid: List[List[int]]) -> int:
q = deque()
count_fresh = 0 # keep track of fresh oranges
for i in range(len(grid)):
for j in range(len(grid[0])):
if grid[i][j] == 2:
q.append([i,j])
elif grid[i][j] == 1:
count_fresh+=1
if count_fresh == 0:
return 0
c = 0
direc = [[1,0], [-1,0],[0,-1], [0,1]]
while q and count_fresh > 0:
c+=1
level_size = len(q)
for _ in range(level_size):
coor = q.popleft()
x = coor[0]
y = coor[1]
for i in direc:
newX = x+i[0] #new x-coor
newY = y+i[1] #new y-coor
if newX < 0 or newX >= len(grid) or newY < 0 or newY == len(grid[0]):
continue
if grid[newX][newY] == 0 or grid[newX][newY] == 2:
continue
count_fresh-=1
grid[newX][newY] = 2
q.append([newX,newY])
return c if count_fresh == 0 else -1