找出最便宜的路径,忽略一个成本

时间:2013-01-07 14:44:22

标签: graph path dijkstra depth-first-search

我想找到2个顶点之间最便宜的路径,我可以选择一条免费的路径,例如:

enter image description here

顶点1和6之间最便宜的路径是1-3-4-5-6 - 我免费进入边缘1-3(费用30),它给我的总费用为21。

除了逐个检查所有路径之外还有其他方法吗?

1 个答案:

答案 0 :(得分:4)

执行此操作的一种方法是执行以下操作:

  1. 复制您的图表,以便您的原始图表G包含节点1,2等。以及带有节点1',2'等的副本G'。和相应的边缘。
  2. 对于G的每个边(a,b),从a到b'制作弧(指向!),从b到a'制作另一个,两者都是成本0.
  3. 最后,使用从子图G的任何顶点到G'的任何顶点的任何最短路径算法(在您的示例中为1到6')。
  4. 基本上,当您使用小丑时,会从子图G切换到G'。

    您可以通过添加额外的副本并将每个新副本链接到最后一个来从那里推广到任意数量的小丑边缘。在这种情况下,你可能不得不使用较少的jokers来添加目标,以便考虑最短路径需要的边缘少于你有笑话的情况。