leetcode 题库994——bfs典型解法(队列+递归实现)

发布时间 2023-08-27 13:04:57作者: Aneverforget

 

class Solution:
    def orangesRotting(self, grid: list[list[int]]) -> int:
        m,n=len(grid),len(grid[0])
        queue,good=[],[]
        def bfs(queue,good,m,n,grid):
            times=0
            directions=[(-1,0),(1,0),(0,1),(0,-1)]
            while queue:
                tmp=len(queue)
                #print(queue,times)
                for t in range(tmp) :
                    i=queue[0]
                    for j in directions:
                        tmp1=i[0]+j[0]
                        tmp2=i[1]+j[1]
                        if 0<=tmp1<m and 0<=tmp2<n and grid[tmp1][tmp2]==1 :
                            grid[tmp1][tmp2]=2
                            queue.append((tmp1,tmp2))
                            good.remove((tmp1,tmp2))
                    queue.pop(0)
                times+=1
            if good:
                return -1
            return times-1
        for i in range(m):
            for j in range(n):
                if grid[i][j]==2:
                    queue.append((i,j))
                elif grid[i][j]==1:
                    good.append((i,j))
        if not good:
            return 0
        elif not queue:
            return -1
        return bfs(queue,good,m,n,grid)

try:
    solution=Solution()
    grid=[[2,1,1],[1,1,0],[0,1,1]]
    res=solution.orangesRotting(grid)
    print(res)
except:
    print('error')