使用K个反向边的图形中所有最短路径

时间:2019-02-18 20:26:48

标签: algorithm graph

假设我有一个有向图G(V,E)在其边缘具有正整数权重,我需要做的是使用最多K(整数)个反向边缘找到所有顶点之间的最短路径。这就是:如果我们在u边,并且从v到u只有一条有向边,我们可以使用它,只要我们没有为此路径使用K个反向边就必须使用C ++并给出最短的边路径。

我考虑过运行dijkstra V次(类似于Johnson的算法),但是我不确定如何利用反向边缘属性。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

解决此类问题的常用方法通常称为“分层”。您(从概念上)复制图的 K +1个副本,从 G 0 G K ,然后在 G u i > i G 中的顶点 v i +1 如果 G 中从 v u 有一条边,则 i +1

G 0 中的 s 0 t G i 中的> i 表示从 s 开始的路径到使用 i 反向边的 G 中的 t ,其中 i 最多为 K

您可以仅在此新的分层图上使用Dijkstra的算法。

当您习惯了这一点后,您可以以一种更简单的方式来思考:您只使用Dijkstra的算法,而不是像[reached v > c ],则您使用的状态为[到达 v ,成本为 c ,并且使用了 i 反向边缘]。通常,当我们在现实生活中使用Dijkstra时,没有给出实际的图,因此将其视为对状态及其过渡的搜索会有所帮助。