给定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中)。
我的解决方案是对的吗?
答案 0 :(得分:1)
对我来说看起来不对。
最简单的方法是认识到在普通的Dijkstra中,每个节点中只存储一个重要的东西,并且它是从根开始的绝对最短路径长度。
对于彩色路径,您必须为每种颜色组合存储最短路径长度。所以,对于3种颜色,你必须存储最短的红色路径,最短的蓝色路径,最短的绿色路径,以及最短的红蓝色,红绿色和蓝绿色路径,最后是最短的红绿色 - 蓝色路径。 (共7种颜色组合)。