我们可以假设所有边的权重都是正的,并且您可以在 O(1) 时间内枚举从顶点向外引导的边,以及向内引导的边。
例如,您可以执行 Dijkstra 遍历(或 A*,具有可接受的启发式)并标记每个顶点从起点到终点的距离,然后在这些标记上反向递归,因为它们描述了最佳路径上的可能前任. 也就是说,对于每个可能的前任,如果标记距离之间的差异等于连接它们的边的权重,您可以确定它是否在贪婪的最佳路径上找到。
在查看可能的前辈时,传入边的成本加上到每个顶点的最佳距离之间的差异等于在解决方案中包含这条边所导致的最优性损失(最优路径上的边为零)。所以也许问题变成了:如何最好地扩展它以产生所有可能的路径,通过递减最优性排序?有没有一种干净的方法来对这种元图执行最佳优先遍历?
这似乎是寻求有用解决方案的正确方向。也许需要记住的有用的事情是,如果您到目前为止探索的路径部分可能是至少x次优的解决方案的一部分,则只需沿着最后访问的x距离进行循环检查(任何x次优的路径不可能包含比x更长的循环)。
有没有更有效的方法?
作为一个额外的问题,是否也可以在具有负边权重的图(已知大小)上执行此操作?如果引入负循环会变得更加困难吗?(请记住,由于我们只在寻找非循环路径,这并不一定意味着最优解会消失。)