问题描述:
给定一个只含非负整数的m*n网格,找到一条从左上角到右下角的可以使数字和最小的路径。
解题思路:最短路径只有两条路径,一条是从右到下,另一条是从下到右,然后取其最小值。
具体代码:
int minPathSum(vector<vector<int> > &grid) {
int m = grid.size();
int n = grid[0].size();
int k[m][n];
k[0][0] = grid[0][0];
for (int i = 1; i < m; i++) {
k[i][0] = k[i-1][0] + grid[i][0];
}
for (int j = 1; j < n; j++) {
k[0][j] = k[0][j-1] + grid[0][j];
}
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
k[i][j] = min(k[i-1][j], k[i][j-1]) + grid[i][j];
}
}
return k[m-1][n-1];
}