我正在寻找一种算法,该算法可以在无向图中找到两个节点之间的最短路径,其成本是动态的。 通过动态,我的意思是边缘成本取决于下一个(未来)步骤。 例如,在这样的图表中:
我正在寻找从“a”到“e”的最短路径,但“a”到“b”的成本取决于下一步。如果我去c,那就是7,如果我去d,那就是9。
我的问题是:是否有解决该问题的算法?
答案 0 :(得分:7)
将问题减少到常规'最短路径问题
创建虚拟顶点b1,b2(而不是b
)和边缘:
(a,b1,7), (b1,c,6), (a,b2,9), (b2,d,5)
其余的边和顶点保持原样。
现在,从源到目标运行常规最短路径算法(Dijkstra / Bellman Ford)。
(对任何'条件'权重边缘重复此过程。)
答案 1 :(得分:0)
如上一个答案中所提到的,由于边权重仅取决于路径中的下一个顶点,因此您可以复制每个顶点最多| V |跟踪下一个行进的顶点的重复项,其中每个重复顶点只有一个外出邻居,输出成本取决于下一个访问哪个邻居。在这个修改过的图上运行Dijkstra算法的总复杂度并不比O(V(V log v + E))差,如果你在每个顶点都有边界度k,那么复杂度就是O(k( V log V + E)),其中V是顶点数,E是边数。