Leetcode 1631 Path With Minimum Effort (python)

Leetcode Path With Minimum Effort

题目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解析

这个题目再Leetcode 的problems里面还没有,只出现在Weekly contest 212的第3题

一开始觉得这个题目是个DP,觉得两遍dp可以做,实际上思路错了,两个方向的dp是不行的。
基本上看到四个方向可走的题目就是用最短路径问题来做,最短路径这边也提供两种做法,一种是Bellman ford,另一种是Dijkstra,关于两种做法的详细解释看这题 Leetcode The Maze I,II

Bellman ford 版本

class Solution:
    def minimumEffortPath(self, heights: List[List[int]]) -> int:
        m = len(heights)
        n = len(heights[0])
        q = collections.deque()
        q.append((0,0))
        distances = [[float('inf')]*n for _ in range(m)]
        distances[0][0] = 0
        dirs = [[0,1],[1,0],[0,-1],[-1,0]]
        
        while q:
            i,j = q.popleft()
            
            
            for d in dirs:
                x = i+d[0]
                y = j+d[1]
                
                if 0<=x<m and 0<=y<n and distances[x][y]>max(distances[i][j],abs(heights[x][y]-heights[i][j])):
                    q.append((x,y))
                    distances[x][y] = max(distances[i][j],abs(heights[x][y]-heights[i][j]))
        
        return distances[-1][-1] if distances[-1][-1]!=float('inf') else -1
        

利用heap的Dijkstra

class Solution:
    def minimumEffortPath(self, heights: List[List[int]]) -> int:
        m = len(heights)
        n = len(heights[0])
        distances = [[float('inf')]*n for _ in range(m)]
        distances[0][0] = 0
        dirs = [[0,1],[1,0],[0,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值