利用动态规划计算最小路径和,如何记录最小路径的索引,请用C++代码展示
时间: 2023-09-16 10:15:52 浏览: 54
以下是利用动态规划计算最小路径和并记录最小路径索引的C++代码:
```c++
#include <iostream>
#include <vector>
using namespace std;
vector<vector<int>> minPathSum(vector<vector<int>>& grid) {
int m = grid.size();
int n = grid[0].size();
vector<vector<int>> dp(m, vector<int>(n, 0));
vector<vector<int>> path(m, vector<int>(n, 0)); // 用于记录最小路径的索引
dp[0][0] = grid[0][0];
// 初始化第一行和第一列
for (int i = 1; i < m; i++) {
dp[i][0] = dp[i-1][0] + grid[i][0];
path[i][0] = 1; // 记录路径向下
}
for (int j = 1; j < n; j++) {
dp[0][j] = dp[0][j-1] + grid[0][j];
path[0][j] = 2; // 记录路径向右
}
// 计算剩余部分
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
if (dp[i-1][j] < dp[i][j-1]) {
dp[i][j] = dp[i-1][j] + grid[i][j];
path[i][j] = 1; // 记录路径向下
} else {
dp[i][j] = dp[i][j-1] + grid[i][j];
path[i][j] = 2; // 记录路径向右
}
}
}
// 输出最小路径
vector<vector<int>> res;
int i = m-1, j = n-1;
res.push_back({i, j});
while (i != 0 || j != 0) {
if (path[i][j] == 1) { // 向下
i--;
} else { // 向右
j--;
}
res.push_back({i, j});
}
reverse(res.begin(), res.end());
return res;
}
int main() {
vector<vector<int>> grid = {{1,3,1},{1,5,1},{4,2,1}};
vector<vector<int>> path = minPathSum(grid);
for (auto& p : path) {
cout << "(" << p[0] << "," << p[1] << ") -> ";
}
cout << endl;
return 0;
}
```
该代码利用动态规划计算最小路径和,并记录了最小路径的索引。其中,`dp[i][j]`表示从左上角到达点`(i,j)`的最小路径和,`path[i][j]`表示从左上角到达点`(i,j)`的最小路径的方向(1表示向下,2表示向右)。最后,根据`path`数组输出最小路径。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)