找到从顶点u到v穿过顶点的最短路径w?

时间:2011-09-06 02:19:16

标签: algorithm graph dijkstra shortest-path

在具有非负边缘权重的有向图中,我可以使用dijkstra轻松找到从u到v的最短路径。但是对Dijkstra有任何简单的调整,以便我可以找到从u到v通过给定顶点w的最短路径。还是其他任何算法建议?

5 个答案:

答案 0 :(得分:8)

找到从u到w的最短路径,然后是从w到v的最短路径。

答案 1 :(得分:5)

  1. 找到从u到w的最短路径
  2. 查找从w到v的最短路径
  3. 然后u-> w-> v是最短的路径。

    您可以通过运行Dijkstra两次来完成,但您也可以应用Floyd-Warshall算法。

答案 2 :(得分:2)

这个问题是NP难的,因此找不到多项式时间解决方案。有关详细信息,请参阅this cstheory post

答案 3 :(得分:1)

使用以下方法,我们只需运行一次算法:

set v_visisted = false
    Start from w and find shortest path to u
    if v was visited during shortest path search to u, set v_visted = true
    If v is part of shortest path from w->u then
          exit with result ( # the path would be u->v->w->v ) 
       else
           if v_visited= true then we already know values for w->v. We have a solution.
           else save path from w->v and switch u to source and find shortest path to v.

请注意,运行从u到v的最短路径实际上是继续算法的第一次运行。因此,我们只运行一次算法,通过跟踪我们是否访问过“v”。

答案 4 :(得分:0)

看起来像找到w然后找到w到v,连接两个结果。它会起作用吗?