码迷,mamicode.com
首页 > 移动开发 > 详细

使用动态规划求mxn个格子,从左上角到右下角的最小路径,每次只能向右或向下移动

时间:2020-07-24 09:47:25      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:最小   使用   有关   最短路   元素   border   math   固定   规划   

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个格子,从左上角到右下角的最小路径,每次只能向右或向下移动

标签:最小   使用   有关   最短路   元素   border   math   固定   规划   

原文地址:https://www.cnblogs.com/wpyblog/p/13369582.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!