给定加权无向图G和两个节点U,V以获得最短路径。如何获得从U到V的最短路径,使用偶数个边(如果可能的话)?
我在网上发现了一些文章,说明需要对原始图表进行修改。但我无法理解如何去做。
有一些很好的材料可以研究这个问题吗?
答案 0 :(得分:2)
您需要构建一个中间图并在该图上运行Dijkstra。
给定图表G = (V, E)
,为每个顶点{{1}创建一个新图G' = (V', E')
,V'
一组新的顶点v_even
和v_odd
在v
和V
顶点集合如下:
如果E'
是(u, v)
中的边缘,则G
和(u_odd, v_even)
是(u_even, v_odd)
中的边,权重相同。
显然,新图形的边和顶点是原始图形的两倍。
现在,如果您想在G'
中找到s
和t
之间的最短路径,只需在G
上运行Dijkstra,即可找到最短路径在G'
和s_even
之间。
运行时间仍为t_even
。
答案 1 :(得分:2)
这样的路径必须将u作为其端点之一,并将v的副本作为另一个端点,因为它们是唯一未被覆盖的顶点。如果您合并复制并删除添加的边,则找到的路径对应于偶数路径,因为它从一个副本开始,到另一个副本结束。而且,每个偶数路径对应于扩充路径(通过相同的参数),因此一个的最小值也是另一个的最小值。这在here中解释。
答案 2 :(得分:0)
如何运行Dijkstra,其中每个节点都有两个值。一个是奇数(来自偶数值),另一个是偶数值。