加权有向图中的最短路径

时间:2019-01-10 20:20:00

标签: algorithm optimization graph shortest-path bellman-ford

我需要在加权有向图中找到两个节点s,t之间的最短路径。 这里是限制:

  1. 权重可以为负。
  2. 路径必须经过特定的边缘,才能从节点u到v呼叫她e和shes。
  3. 输出路径必须简单,即我们只能通过一个节点一次。

现在我有一个解决方案的主意,但我不知道输出是否为简单路径。

我的解决方案是运行bellman ford算法两次,一次是从s,第二次是从v。最短的路径是s到u,u到v,v到t。

因为我希望它很简单,所以我将不使用第二次Bellman Ford运行中已经使用的节点。

因为我希望它最短,所以我将检查从v到t运行bellman ford,然后再从s到u运行是否比其他方法快(如果有一个节点都使用where放置它的最佳位置) )。

感谢帮手!

1 个答案:

答案 0 :(得分:1)

即使找到这样的路径也是NP完全的。这是因为两个顶点/边不相交的路径问题是有向图中的NPC。假设边e =(u,v),那么您正在寻找(s,u),(v,t)不相交的路径,但这在有向图中是NP完全的。

在这里您可以找到硬度结果: https://www.sciencedirect.com/science/article/pii/0304397580900092

您当前基于Bellman-ford的算法不能在所有情况下都给出正确的答案(有路径时可能无法找到路径),但是,这可能是一种很好的启发式方法。如果您的图形是无向的,那么任务就容易得多。

如果允许重复顶点,那么任何最短路径算法都是正确的方法。