给定一个 n * m 的矩阵 a,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,输出所有的路径中最小的路径和。 输入:[[1,3,5,9],[8,1,3,4],[5,0,6,1],[8,8,4,0]] 输出:12
时间: 2024-03-13 07:44:50 浏览: 111
migongwenti.rar_M?n_迷宫问题
这道题可以使用动态规划来解决。设dp[i][j]为从左上角走到第i行第j列的格子的最短路径长度。则有:
dp[i][j] = a[i][j] + min(dp[i-1][j], dp[i][j-1])
其中a[i][j]表示第i行第j列的格子上的数字。
最终的答案即为dp[n-1][m-1],n为矩阵的行数,m为矩阵的列数。
以下是代码实现:
```
def minPathSum(a):
n = len(a)
m = len(a[0])
dp = [[0] * m for _ in range(n)]
dp[0][0] = a[0][0]
# 初始化第一列
for i in range(1, n):
dp[i][0] = dp[i-1][0] + a[i][0]
# 初始化第一行
for j in range(1, m):
dp[0][j] = dp[0][j-1] + a[0][j]
# 递推求解
for i in range(1, n):
for j in range(1, m):
dp[i][j] = a[i][j] + min(dp[i-1][j], dp[i][j-1])
return dp[n-1][m-1]
```
使用给定的输入,输出结果为12,即所有路径中最小的路径和。
阅读全文