c++如何实现矩阵最小路径和问题(动态规划法)
时间: 2024-05-02 07:20:25 浏览: 7
矩阵最小路径和问题可以使用动态规划法来解决。具体步骤如下:
1. 定义状态:设dp[i][j]表示从起点到(i,j)的最小路径和。
2. 初始化状态:dp[0][0] = matrix[0][0]。
3. 状态转移方程:对于第一行和第一列,dp[i][j]只能从其上方或左侧到达,所以有:
a. 当i=0且j>0时,dp[i][j] = dp[i][j-1] + matrix[i][j]。
b. 当i>0且j=0时,dp[i][j] = dp[i-1][j] + matrix[i][j]。
对于其他位置,dp[i][j]可以从其上方或左侧到达,所以有:
c. 当i>0且j>0时,dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + matrix[i][j]。
4. 最终结果:dp[m-1][n-1]即为所求的最小路径和,其中m和n分别为矩阵的行数和列数。
代码实现如下:
```python
def minPathSum(matrix):
m, n = len(matrix), len(matrix[0])
dp = [[0] * n for _ in range(m)]
dp[0][0] = matrix[0][0]
for i in range(1, m):
dp[i][0] = dp[i-1][0] + matrix[i][0]
for j in range(1, n):
dp[0][j] = dp[0][j-1] + matrix[0][j]
for i in range(1, m):
for j in range(1, n):
dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + matrix[i][j]
return dp[m-1][n-1]
```
时间复杂度为O(mn),空间复杂度为O(mn),其中m和n分别为矩阵的行数和列数。