找到最多使用k个特殊弧线的最短路径

时间:2015-03-31 14:35:00

标签: algorithm graph graph-algorithm

我有一个非负重量的图表,在这个图表中有任何"特殊"弧。 找到一个算法,可以找到两个顶点之间的最小路径,最多使用k" special"弧。 输入:graph,s,t,k。

如果存在超过k弧特殊废料的路径,我想到了使用以t为基础的树的树。 此时我应该有一个DAG并使用任何算法来找到最小距离。

1 个答案:

答案 0 :(得分:1)

我有两种方法:

第一种方法: 对于每个顶点u,计算从源k+1到该顶点的最短路径s。因此,每个顶点都有一个数组dst = {d0, d2, d3, .... , dk},其中di是从su使用精确i特殊弧的最短路径。 现在,您可以使用dikstra's algorithm的变体来解决此问题,而不是拥有一个优先级队列,而是拥有k + 1个优先级队列,其中每个队列对应的值为i : 0 <= i <= k

第二种方法(更优雅): 想象你有一个k + 1楼层的建筑物。每层楼都有一张图表;然而,特殊的弧形作为相邻楼层之间的楼梯。因此,如果原始图形中顶点u顶点v之间有一个特殊弧,则在u层中的每个顶点j (0 <= j <= k-1)和每个顶点{{}之间将有一个弧。 1}}在楼层v。因此,在此新图表中,从楼层j + 1中的顶点u到楼层0中的顶点v的任何路径都使用完全j个特殊弧。然后在新图表中,您不能使用超过j个特殊弧线从任何顶点u到任何其他顶点v,因为您最多只能攀爬k个楼层。您可以使用Dikstra算法从地板k中的源顶点开始解决新图上的问题。

运行时间为0