在具有非负边缘权重的有向图中,我可以使用dijkstra轻松找到从u到v的最短路径。但是对Dijkstra有任何简单的调整,以便我可以找到从u到v通过给定顶点w的最短路径。还是其他任何算法建议?
答案 0 :(得分:8)
找到从u到w的最短路径,然后是从w到v的最短路径。
答案 1 :(得分:5)
然后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,连接两个结果。它会起作用吗?