求解矩阵最短路径问题

在LeetCode上遇到一题,要求从矩阵的左上角移动到右下角,路径上数字之和最小。可以只向下或向右移动。通过分析,采用动态规划策略,构建新矩阵记录到达每个位置的最小和,状态转移方程为s[i][j]=min(s[i-1][j],s[i][j-1])+G[i][j]。最终用Python实现了该算法,找到了最优路径。" 133591698,19694568,Python字典遍历:items() vs keys()与values(),"['Python', '开发语言', '数据结构']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近刷LeetCode,题目是这样的:
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.

Note: You can only move either down or right at any point in time.

Example 1:

[[1,3,1],
[1,5,1],
[4,2,1]]
Given the above grid map, return 7. Because the path 1→3→1→1→1 minimizes the sum.

简单来说就是从[0][0]寻找出到[n-1][n-1]和最小的点。这里当然可以用暴力搜索去解决,不过用动态规划会更加简单。首先,分析这个问题,你需要寻找的其实就是从哪个位置到达所需要的点G[i][j]是最小的,这里建立一个新的矩阵,用来存储到达每个点的和,记为s[i][j],到达G[i][j],只有两个位置,即s[i-1][j]和s[i][j-1],那么利用动态规划我们就可以求出:
s[i][j]=min(s[i-1][j],s[i][j-1])+G[i][j]。基本思想解决了,剩下就是写代码了,这里用python实现:

class Solution(object):
    def minPathSum<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值