动态规划-矩阵最小路径和
2018-02-27 22:27
197 查看
题目描述
有一个矩阵map,它每个格子有一个权值。 从左上角的格子开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和。 返回所有的路径中最小的路径和。 给定一个矩阵map及它的行数n和列数m,请返回最小路径和。
求解过程
给定一个N*M的矩阵,假定N等于4,M等于4 1 2 3 4 4 8 3 2 6 1 4 5 7 3 7 8 现在生成一个大小为N*M的矩阵dp, dp[i][j]的含义为从(0,0)点到(i,j)点的最小路径 显然 第一行的路径值就为从0,0点到i,j 每一点值的和 1 3 6 10 1 5 11 18 置dp[0][0] = 矩阵值[0][0]; 对于第一行来说: dp[i][0] = dp[i-1][0] + 矩阵值[i][0]; 对于第一列来说: dp[0][i] = dp[0][i-1] + 矩阵值[0][i]; 对于除第一行第一列之后其他的位置有: dp[i][j] = min(dp[i-1][j] ,dp[i][j-1])+ 矩阵值[i][j]; 至此,状态转移方程求解完毕
代码实现
class MinimumPath { public: int getMin(vector<vector<int> > juzhen, int n, int m) { vector<vector<int> >dp(n,vector<int>(m,0)); dp[0][0] = juzhen[0][0]; for (int i=1; i<n; ++i) dp[i][0] = dp[i-1][0] + juzhen[i][0]; for (int i=1; i<m; ++i) dp[0][i] = dp[0][i-1] + juzhen[0][i]; for(int i=1; i<n; ++i) { for (int j=1; j<m; ++j) { dp[i][j] = m 4000 in(dp[i][j-1], dp[i-1][j]) + juzhen[i][j]; } } return dp[n-1][m-1]; } };
相关文章推荐
- 动态规划---三角矩阵最小路径
- 递归与动态规划---矩阵的最小路径和
- 利用动态规划,求数值矩阵左上角至右下角最小路径
- 动态规划-----矩阵最小路径和
- 动态规划--矩阵最小路径和
- 矩阵的最小路径之和
- 矩阵的最小路径和
- 矩阵的最小路径和
- 矩阵最小路径和
- leetcode 64. Minimum Path Sum-最小路径和|动态规划
- C++实现矩阵图的遍历·最小生成树(prim,kruskal)·最短路径(Dijkstra,floyd)
- 动态规划之矩阵的最小路径和
- 矩阵的最小路径和
- Leetcode-64_. Minimum Path Sum(最小路径和)—动态规划解法+记忆化搜索解法-C++解
- 动态规划 01背包 最大子数组和 最小路径 斐波那契数列
- 矩阵的最小路径和(空间压缩)
- 动态规划之最小带权路径(Min Cost Path)
- LeetCode -- Triangle 路径求最小和( 动态规划问题)
- 矩阵的最小路径和
- 矩阵的最小路径和