您的位置:首页 > 编程语言 > C语言/C++

leetcode 64 c语言. Minimum Path Sum

2016-12-11 16:33 471 查看

解题思路:DP问题

从左上走到右下,求最短路,首先想到了dijkstra算法,但是这个题并不需要那么麻烦,
1.遍历每行,求出第一列的累加结果
2.遍历每列,求出第一行的累加结果
3.遍历整个二维数组,每次取加上上一行或者列的元素的最小值,最后dp[m-1][n-1]即为结果

int minPathSum(int** grid, int gridRowSize, int gridColSize) {
int m=gridRowSize,n=gridColSize;
int dp[m]
;
int i,j;
dp[0][0]=grid[0][0];
for(i=1;i<m;i++)dp[i][0]=dp[i-1][0]+grid[i][0];
for(i=1;i<n;i++)dp[0][i]=dp[0][i-1]+grid[0][i];
for(i=1;i<m;i++){
for(j=1;j<n;j++){
dp[i][j]=grid[i][j]+min(dp[i-1][j],dp[i][j-1]);
}
}
return dp[m-1][n-1];
}

int min(int a,int b){
if(a<b)return a;
else return b;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dp 算法 c语言 leetcode