给定有向和加权图G =(V,E)
没有负加权边缘。
每条边都是彩色的(黑色或黄色)。
我需要找到一个算法,找到给定s∈V的最短路径,而每条路径必须遵循这条规则:color(v i ,v i + 1 )= color(v i + 3 ,v i + 4 ),∀i:1≤i≤k-4,而路径为v 1 →...→v k 。 算法需要在O(| V | + | E | log(| V |))中。
答案 0 :(得分:4)
作为提示:尝试修改Dijkstra算法以存储两个不同的优先级队列:一个包含从起始节点到目标节点以黄色边缘结束的路径的开销,以及从起始节点开始的路径的开销到以黑色边缘结束的目标节点。然后,更新逻辑以找到要选择考虑两个队列的下一个节点,并更改减小键逻辑以确保使用正确的信息更新正确的队列。这可以通过正常Dijkstra算法的常数因子开销来完成,因此需要时间O(| E | + | V | log | V |)。
希望这有帮助!
答案 1 :(得分:2)
您可以修改Dijkstra的算法,如templatetypedef建议,或修改图形以适应约束。
您可以使用DFA识别颜色约束,并将其与加权图形相结合,以获得可以应用未修改的Dijkstra的图形,从而实现典型的Dijkstra运行时。
约束的确切开销取决于DFA的大小,但它是常量,因为DFA不依赖于输入。