题目大意:给出一个二维数组,数组中的每个元素非负。找出一条从左上角到右下角的最短路径。(每次只能向右或者向下走一格)
算法思想:
1.采用一个二维数组V记录从起点到当前位置的最短距离。
2.遍历二维数组,填写数组V。V的值分3种情况
(1)当前位置处于上边界 V[i][j]=V[i][j-1]+grid[i][j]
(2) 处于左边界V[i][j]=V[i-1][j]+grid[i][j]
(3) 不处于边界 V[i][j]=min(V[i-1][j],V[i][j-1])+grid[i][j];
3.当表填完后,返回V[m][n]
代码如下:
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int m=grid.size();
int n=grid[0].size();
int V[m][n];
for(int i=0;i<m;++i){
for(int j=0;j<n;++j){
if(i==j&&i==0){
V[i][j]=grid[i][j];
}
else{
if(j-1>=0&&i-1>=0) V[i][j]=min(V[i][j-1],V[i-1][j])+grid[i][j];
if(j-1<0) V[i][j]=V[i-1][j]+grid[i][j];
if(i-1<0) V[i][j]=V[i][j-1]+grid[i][j];
}
}
}
for(int i=0;i<m;++i){
for(int j=0;j<n;++j){
cout <<V[i][j]<<" ";
}
cout<<endl;
}
return V[m-1][n-1];
}
};