题意:
原题链接
代码:
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
const int INF = 0x3f3f3f3f;
int n = grid.size(), m = grid[0].size();
vector<vector<int>> f(n, vector<int>(m, INF));
f[0][0] = grid[0][0];
for(int i = 0; i < n; ++i)
for(int j = 0; j < m; ++j) {
if(i == 0 && j == 0) continue;
int l = j > 0 ? f[i][j - 1] : INF;
int u = i > 0 ? f[i - 1][j] : INF;
f[i][j] = min(l, u) + grid[i][j];
}
return f[n - 1][m - 1];
}
};
拓展:
问具体的最短路径,可以用
p
a
t
h
[
i
]
[
j
]
path[i][j]
path[i][j]记录其转移过来的点,然后倒推到
p
a
t
h
[
0
]
[
0
]
path[0][0]
path[0][0]即可。