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] 即为左上角都右下角的最短路径。

  

posted on 2020-07-23 23:28  wupengyi  阅读(799)  评论(0编辑  收藏  举报