问题
当目的地未知时,如何找到最低成本路径,但遍历的边数是固定值?是否有针对此问题的特定名称,或者是用于解决此问题的算法?
请注意,这个词可能是" walk"比#"路径"更合适,我不确定。
解释
假设您有加权图,并从顶点V1开始。目标是找到具有最小成本的长度为N的路径(其中N是遍历的边数,可以多次越过相同的边,可以重新访问顶点)。对于所有可能的起始顶点,需要重复此过程。
作为额外的启发式算法,请考虑一个回合制游戏,其中有走廊连接的房间。每个走廊都有与之相关的费用,并且您的最终得分会降低一个等于每次付费的金额'。它需要1转才能穿过走廊,游戏持续10回合。你可以留在一个房间(自我循环),但留下来也有相关的成本。如果你知道所有走廊的费用(并且留在每个房间;也就是说你知道加权图),那么10转(或N转)游戏的最佳(最高得分)路径是多少?您可以重新访问房间和走廊。
可能的方法(可能失败)
我原本考虑使用Dijkstra算法来查找所有顶点对之间的最低成本路径,然后对于每个起始顶点子集,长度为N的LCP。但是,我意识到这可能不会给出< em>给定起始顶点的长度为N的 LCP。例如,Dijkstra在V1和V2之间的LCP可能具有&lt; N和Dijkstra可能已经排除了不必要但成本低廉的边缘,如果包括在内,它会使路径长度等于N.
答案 0 :(得分:2)
一个有趣的事实是,如果A是邻接矩阵,并且您使用加法和min来代替通常的乘法和和来计算A k 在正常矩阵乘法中,则A k [i,j]是从节点i到节点j的具有恰好k个边缘的最短路径的长度。现在的诀窍是使用重复的平方,这样A k 只需要log k矩阵乘法运算。
如果除了最小长度之外还需要路径,则必须跟踪每个min操作的结果来自哪里。
出于您的目的,您需要结果矩阵和相应路径的每一行的最小位置。
如果图形密集,这是一个很好的算法。如果它很稀疏,那么每个节点进行一次面包优先搜索到深度k将会更快。