具有多个条件的SP

时间:2019-01-26 15:24:30

标签: algorithm graph-theory

假设我们有向G(V,E)图的边缘上具有正权重,则该图的边缘也为黑色或绿色,给定起始顶点u,我们需要找到u的最小路径(权重)到V的所有顶点。这些路径最多必须有k个绿色边(其中k是一个正整数)。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以首先创建由顶点和黑色边缘的副本组成的k + 1G_i

  • 为您创建的v in Vv_0, v_1, ... v_k
  • 为每个(u, v) in E创建(u_i, v_i)的每个黑边0 <= i <= k

这些G_i中的每一个都代表您已经使用i个绿色边缘之后的状态。因此,我们可以通过添加绿色边缘来连接这些图:

  • 为每一个绿色(u, v) in E都为所有(u_i, v_{i+1})创建边缘0 <= i < k

边缘是有方向的,因此您不能向后移动,即,已使用的绿色边缘的数量永远不会减少。

最后,添加汇点顶点:

  • 为每个v in V创建一个v_s,并为所有(v_i, v_s)创建一个权重为0的边缘0 <= i <= k

这些下沉顶点允许为所使用的每个绿色顶点确定到顶点v的最小距离。


现在,只需以起始顶点u_0运行Dijkstra即可。对于所有v in Vv_s的结果是使用最多u个绿色边缘从vk的最短距离。


Dijkstra的运行时间为O(|E| + |V| log |V|)。我们的顶点总数为O(k) * |V|,边的总数为O(k) * |E|,因此最终运行时间为

O(k|E| + k|V| log k|V|)