给出成本矩阵成本[] []和成本[] []中的位置(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)。 我怎样才能找到路径?
答案 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)回溯开始。