力扣778水位上升的泳池中游泳——python

题目要求我们在最短的时间内从左上角走到右下角,我们需要找到一个合理的路线,我们可以堆加bfs,在python中,我们可以用heapq这个包来模拟堆队列
heapq — 堆队列算法,这是官方文档的介绍。
堆队列是一个优先级队列,最小值永远在最前面,我们可以创建一个列表,里面由若干个元组,元组中分别是水位和坐标,堆会自动按照坐标排序,依次从左上角开始往下走,先走比较低的水位,同时,我们使用heappop也会弹出最小的值并且删除,利用heappush也会加入元素代码如下:

        res = 0
        n = len(grid)
        heap = [(grid[0][0],0,0)]#初始化第一个点
        visited = set([(0,0)])
        #我们创建个集合保存我们走过的点,不需要再走一遍了
        while heap:
            height,x,y = heapq.heappop(heap)
            res = max(res,height)
            #我们选取最高水位作为返回值
            if x == n-1 and y == n-1:
                return res
            
            for dx,dy in [(0,1),(0,-1),(1,0),(-1,0)]:
            #上下左右一次走一遍
                new_x,new_y = x + dx,y + dy
                if 0 <= new_x < n and 0 <= new_y < n and (new_x,new_y) not in visited:#判断是否越界和走过
                    visited.add((new_x,new_y))
                    heapq.heappush(heap,(grid[new_x][new_y],new_x,new_y))
                    #我们按照优先级队列加入并排序
        
        return -1

你可能感兴趣的:(力扣,python,leetcode)