具有偶数边缘的最短路径

时间:2015-09-22 16:48:35

标签: algorithm graph

给定加权无向图G和两个节点U,V以获得最短路径。如何获得从U到V的最短路径,使用偶数个边(如果可能的话)?

我在网上发现了一些文章,说明需要对原始图表进行修改。但我无法理解如何去做。

有一些很好的材料可以研究这个问题吗?

3 个答案:

答案 0 :(得分:2)

您需要构建一个中间图并在该图上运行Dijkstra。

给定图表G = (V, E),为每个顶点{{1}创建一个新图G' = (V', E')V'一组新的顶点v_evenv_oddvV顶点集合如下: 如果E'(u, v)中的边缘,则G(u_odd, v_even)(u_even, v_odd)中的边,权重相同。

显然,新图形的边和顶点是原始图形的两倍。

现在,如果您想在G'中找到st之间的最短路径,只需在G上运行Dijkstra,即可找到最短路径在G's_even之间。

运行时间仍为t_even

答案 1 :(得分:2)

  1. 制作具有相同重量的图表副本,并将其命名为G'。
  2. 将G的每个顶点连接到G'中的相应顶点。并将新边的权重设置为零。
  3. 从G'删除u的副本并从G中删除v。
  4. 现在,您在G和G'之间添加了一组边。构成匹配的M.进行匹配并找到匹配的最小扩充路径。
  5. 这样的路径必须将u作为其端点之一,并将v的副本作为另一个端点,因为它们是唯一未被覆盖的顶点。如果您合并复制并删除添加的边,则找到的路径对应于偶数路径,因为它从一个副本开始,到另一个副本结束。而且,每个偶数路径对应于扩充路径(通过相同的参数),因此一个的最小值也是另一个的最小值。这在here中解释。

答案 2 :(得分:0)

如何运行Dijkstra,其中每个节点都有两个值。一个是奇数(来自偶数值),另一个是偶数值。