使用动态规划在最小成本路径算法中查找路径

时间:2013-12-22 10:33:45

标签: dynamic path shortest-path

  • 给出成本矩阵成本[] []和成本[] []中的位置(m,n),写 返回达到最小成本路径成本的函数(m,n) 来自(0,0)。

  • 矩阵的每个单元格代表遍历该单元格的成本 细胞。到达路径的总成本(m,n)是所有成本的总和 该路径(包括源和目的地)。

  • 您只能从a向下,向右和对角线降低细胞 给定单元,即来自给定单元(i,j),单元(i + 1,j),(i,j + 1) 和(i + 1,j + 1)可以遍历。

  • 您可以假设所有费用都是正整数。

我能够找到最低费用,而且这篇文章非常有用:

http://www.geeksforgeeks.org/dynamic-programming-set-6-min-cost-path/

dp http://d2o58evtke57tz.cloudfront.net/wp-content/uploads/dp2.png

但它没有告诉必须遵循的实际路径,在上面的例子中是(0,0) - > (0,1) - > (1,2) - > (2,2)。 我怎样才能找到路径?

2 个答案:

答案 0 :(得分:1)

当您搜索路径时,还要跟踪您正在做出的决定,即当您在此声明中选择最小值时(取自您引用的文章):

return cost[m][n] + min( minCost(cost, m-1, n-1),
                           minCost(cost, m-1, n),
                           minCost(cost, m, n-1) );

您还需要跟踪哪个元素是最小的(例如,在带有方向的单独矩阵中(左,上,左上))。然后你可以从矩阵的最后一个元素回溯并重建路径。

这基本上是带有反向跟踪的Levenshtein距离,你可以找到一个伪代码实现,例如here

答案 1 :(得分:0)

当我们使用辅助阵列在最常见的子序列问题中使用箭头保持轨道时,类似地,我们可以跟踪哪个元素返回最小值。然后根据您存储的箭头从单元格(m,n)回溯开始。