具有动态边缘成本的最短路径(算法)

问题描述 投票:3回答:2

我正在寻找一种算法,该算法可以在无向图中找到两个节点之间的最短路径,其成本是动态的。通过动态,我的意思是边缘成本取决于下一个(未来)步骤。例如,在这样的图表中:

我正在寻找从“a”到“e”的最短路径,但“a”到“b”的成本取决于下一步。如果我去c,它是7,如果我去d,它是9。

我的问题是:是否有解决该问题的算法?

algorithm graph
2个回答
7
投票

将问题减少到“常规”最短路径问题

创建虚拟顶点b1,b2(而不是b)和边缘:

(a,b1,7), (b1,c,6), (a,b2,9), (b2,d,5)

其余的边和顶点保持原样。

现在,从源到目标运行常规的最短路径算法(Dijkstra / Bellman Ford)。

(对任何'条件'权重边重复此过程)。


0
投票

正如之前的回答所提到的,由于边权重仅取决于路径中的下一个顶点,因此您可以复制每个顶点最多| V |跟踪下一个行进的顶点的重复项,其中每个重复顶点只有一个外出邻居,输出成本取决于下一个访问哪个邻居。在这个修改过的图上运行Dijkstra算法的总复杂度并不比O(V(V log v + E))差,如果你在每个顶点都有边界度k,那么复杂度就是O(k(V log V +) E)),其中V是顶点数,E是边数。

© www.soinside.com 2019 - 2024. All rights reserved.