每个边都有一个dag(有向无环图),每个边都有一个类型,A型或B型
例如:
(红色边缘表示A型,黑色边缘表示B型边缘)
问题定义如下:
given two vertices s, t, find a shortest path between these two vertices
subject to the usage of m type-A edges and n type-B edges,
or report no such path exists
例如,给定A,D和m = 1,n = 2,找到A和D之间的最短路径,同时满足约束
在这种情况下,最短路径为A,B,C,D,最短路径长度为7
我的脑海中浮现出一个想法,首先,我们进行拓扑排序, 然后使用拓扑顺序作为检查序列,跟踪最短路径长度和从A开始的遍历边缘
簿记记录将如下所示,
[ Number_of_Type_A , Number_of_Type_B , Shortest_length , Prescessor ]
并继续考虑传入边缘,就像在dag中找到最短路径的常用方法一样
e.g。
(我错过了边缘3(B,D))
考虑A:
[0, 0, 0, NIL]
考虑B:(1个传入边缘)
[1, 0, 1, A]
考虑C :( 2个传入边缘)
[1, 1, 3, B] and
[1, 0, 1, A]
考虑D :( 2个传入边缘)
[1, 2, 7, C] and
[1, 1, 5, C] and
[2, 0, 4, B]
由于存在使用1个A型和2个B型边的路径,并且可以在记录中找到最短路径和长度并追溯前辈
所以就是这样。
(时间复杂度是...... O(V + E)?我想可能比这更大,但我不知道如何分析它)
我不确定这是解决这个问题的正确方法。
还有其他方法可以解决这个问题吗?一般来说这个问题到底是什么?
感谢您的帮助!