用python写一个最短路径和. 输入矩阵,输出左上角到右下角的最短路径和。例如: 程序框输入:[[1,3,1],[1,5,1],[4,2,1]] 则输出:7
时间: 2023-10-06 18:04:28 浏览: 73
python矩阵/字典实现最短路径算法
好的,可以使用动态规划来解决这个问题。具体做法如下:
1. 首先初始化一个和输入矩阵相同大小的矩阵 dp,用来记录到当前位置的最短路径和。dp[i][j] 表示从左上角到矩阵中第 i 行 j 列位置的最短路径和。
2. 然后初始化 dp[0][0] 为输入矩阵的第一个元素,即 dp[0][0] = grid[0][0]。
3. 接着,初始化第一行和第一列的 dp 值。由于只能向右或向下走,所以第一行和第一列的 dp 值就等于前一个位置的 dp 值加上当前位置的值。即 dp[i][0] = dp[i-1][0] + grid[i][0],dp[0][j] = dp[0][j-1] + grid[0][j]。
4. 然后遍历整个矩阵(除了第一行和第一列),对于每个位置 (i, j),计算出到当前位置的最短路径和。这个值等于上方和左方 dp 值中的较小值加上当前位置的值。即 dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + grid[i][j]。
5. 最后返回 dp 矩阵的右下角值,即为左上角到右下角的最短路径和。
下面是 Python 代码实现:
```python
def minPathSum(grid):
m, n = len(grid), len(grid[0])
dp = [[0] * n for _ in range(m)]
dp[0][0] = grid[0][0]
# 初始化第一行和第一列
for i in range(1, m):
dp[i][0] = dp[i-1][0] + grid[i][0]
for j in range(1, n):
dp[0][j] = dp[0][j-1] + grid[0][j]
# 计算其余位置的 dp 值
for i in range(1, m):
for j in range(1, n):
dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + grid[i][j]
return dp[-1][-1]
```
对于输入矩阵 `[[1,3,1],[1,5,1],[4,2,1]]`,运行上述函数可以得到输出值为 7。
阅读全文