Rotting oranges

leetcode.cn

class Solution:
    def orangesRotting(self, grid: List[List[int]]) -> int:

        ROW, COL = len(grid), len(grid[0])
        dirs = [(0, 1), (0, -1), (1, 0), (-1, 0)]
        count = 0
        rotten = {(i,j) for i in range(ROW) for j in range(COL) if grid[i][j]==2}
        fresh = {(i,j) for i in range(ROW) for j in range(COL) if grid[i][j]==1}
        if not fresh: return 0
        # bfs starts here
        while fresh:
            if not rotten: return -1
            rotten = {(i + di, j + dj) for i, j in rotten for di, dj in [(0, 1), (0, -1), (1, 0), (-1, 0)] if (i + di, j + dj) in fresh}
            fresh -= rotten 
            count += 1
        return count