Bootstrap

python算法每日练习day01

每天记录自己学习到并练习的算法,使用python
一、
1.今天学习是leetcode第994题腐烂的橘子原链接在这
2.使用的是bfs(广度优先遍历)+队列(先进先出)完成的
题目:
[
[2,1,1],
[1,1,0],
[0,1,1]
]
2-腐烂,1-新鲜,0-空
每分钟任何与腐烂的橘子相邻的新鲜橘子都会腐烂,返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1,没有新鲜橘子返回0

直接上代码

class Solution:
    def orangesRotting(self, grid: List[List[int]]) -> int:
        #如果没有新鲜橘子
        l = [y for i in grid for y in i]
        if 1 not in l:
            return 0

        x = len(grid) #行
        y = len(grid[0]) #列
        time = 0
        
        #四个方向
        locs = [(-1,0), (1, 0), (0, -1), (0, 1)]#上下左右
        #模拟一个队列
        q = []
        #把所有腐烂的橘子放入队列中
        for i in range(x):
           for j in range(y):
               if grid[i][j] == 2:
                   #从最右端加入
                   q.append((i, j, 0))
        #遍历队列里所有腐烂的橘子,直到为空
        while q:
            #从左端弹出
            i, j , time= q.pop(0)
            for loc in locs:
                loc_i, loc_j = i+loc[0], j+loc[1]
                #判断腐烂的橘子上下左右是否有新鲜橘子,有的话就会腐烂
                if 0 <= loc_i < x and 0 <= loc_j < y and grid[loc_i][loc_j] == 1:
                    grid[loc_i][loc_j] = 2
                    q.append((loc_i, loc_j, time+1))
                    
        #最后判断还有没有新鲜橘子
        for g in grid:
            if 1 in g:
                return -1   
        
        return time

;