如何找到最短的彩色路径?

时间:2017-01-30 11:25:20

标签: algorithm shortest-path

给定G =(V,E)每个边缘都有这三种颜色中的一种{绿色,红色,蓝色}。 我们称之为路径"彩色路径"如果他有三种颜色。

    Input: graph G(V,E),weight function w:E->Q+ , colored edges and vertices s .
    output: algorithm that finds for every vertices v, a shortest path from s 
           that is Colored path

我的解决方案是遍历图形,并为每个顶点计算路径所具有的颜色数。创建3个名为G1,G2,G3

的图形副本

对于每个v,c(v)= 2(c是从s到此路径的颜色数),将v1连接到第二个图(G2)中的v2,边权重为0。

对于每个边c(v)= 3从v2(从G2)连接到v3(到G3),边权重= 0。

从d到d3运行dijkstra(在G3中)。

我的解决方案是对的吗?

1 个答案:

答案 0 :(得分:1)

对我来说看起来不对。

最简单的方法是认识到在普通的Dijkstra中,每个节点中只存储一个重要的东西,并且它是从根开始的绝对最短路径长度。

对于彩色路径,您必须为每种颜色组合存储最短路径长度。所以,对于3种颜色,你必须存储最短的红色路径,最短的蓝色路径,最短的绿色路径,以及最短的红蓝色,红绿色和蓝绿色路径,最后是最短的红绿色 - 蓝色路径。 (共7种颜色组合)。