用python写一个最短路径和. 输入矩阵,输出左上角到右下角的最短路径和。例如: 输入:[[1,3,1],[1,5,1],[4,2,1]] 输出:7
时间: 2023-10-06 15:04:28 浏览: 88
你可以使用动态规划来解决这个问题。具体来说,设 $dp_{i,j}$ 表示从左上角到矩阵中第 $i$ 行第 $j$ 列的元素的最短路径和,则有:
$$
dp_{i,j} = \begin{cases}
matrix_{0,0} & i=0,j=0 \\
dp_{i,j-1} + matrix_{i,j} & i=0,j>0 \\
dp_{i-1,j} + matrix_{i,j} & i>0,j=0 \\
\min(dp_{i-1,j}, dp_{i,j-1}) + matrix_{i,j} & i>0,j>0
\end{cases}
$$
其中 $matrix_{i,j}$ 表示矩阵中第 $i$ 行第 $j$ 列的元素。
最终的最短路径和就是 $dp_{m-1,n-1}$,其中 $m$ 和 $n$ 分别是矩阵的行数和列数。
下面是使用动态规划求解最短路径和的 Python 代码:
```python
def minPathSum(matrix):
m, n = len(matrix), len(matrix[0])
dp = [[0] * n for _ in range(m)]
for i in range(m):
for j in range(n):
if i == 0 and j == 0:
dp[i][j] = matrix[i][j]
elif i == 0:
dp[i][j] = dp[i][j-1] + matrix[i][j]
elif j == 0:
dp[i][j] = dp[i-1][j] + matrix[i][j]
else:
dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + matrix[i][j]
return dp[m-1][n-1]
```
你可以将输入矩阵作为参数传递给这个函数,然后它会返回左上角到右下角的最短路径和。例如:
```python
matrix = [[1, 3, 1], [1, 5, 1], [4, 2, 1]]
print(minPathSum(matrix)) # 输出 7
```
阅读全文