使用动态规划求mxn个格子,从左上角到右下角的最小路径,每次只能向右或向下移动
Posted wpyblog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用动态规划求mxn个格子,从左上角到右下角的最小路径,每次只能向右或向下移动相关的知识,希望对你有一定的参考价值。
1 | 2 | 5 | 6 |
3 | 2 | 4 | 2 |
4 | 3 | 3 | 1 |
5 | 1 | 2 | 1 |
对于第一行的元素,因为只能向右移动,所以路径是固定的,同样对于第一列元素,路径也是固定的。
而对于非第一行与第一列的元素,我们只要找到到它上方和左侧元素的最小路径即可,因为求最短路径将会与其相邻元素有关,所以可以使用动态规划算法。
步骤
加入所求数组为grid[m][n],我们就可创建dp[m][n]存储到达每个元素的最短路径 dp[i][j]就表示从左上角开始到[i][j]的最短路径,从而求出最终的结果。
- dp[0][0] = grid[0][0]
- 对于第一行元素(即 i = 0 同时 j > 0),每次向右移动,求出到达每个元素的路径 dp[0][j] = dp[0][ j - 1]+grid[0][j]。
- 对于第一列元素(即 i > 0 同时 j = 0),每次向下移动,求出到达每个元素的路径 dp[i][0] = dp[i - 1][0]+grid[i][0]。
- 对于其他元素(即 i > 0 同时 j >0),dp[i][j] = Math.min(dp[i - 1][j],dp[i][ j - 1])+grid[i][j];
- 最后返回 dp[m -1][n - 1] 即为左上角都右下角的最短路径。
以上是关于使用动态规划求mxn个格子,从左上角到右下角的最小路径,每次只能向右或向下移动的主要内容,如果未能解决你的问题,请参考以下文章