使用动态规划求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个格子,从左上角到右下角的最小路径,每次只能向右或向下移动的主要内容,如果未能解决你的问题,请参考以下文章

动态规划-64. 最小路径和

数据结构与算法题解|动态规划|——矩阵型动态规划

动态规划算法-2

409,动态规划求不同路径

动态规划——leetcode64.最小路径和

数据结构与算法动态规划——最小路径和(普通矩阵三角形两题)