Algorithm 正加权有向无环图的k边最短路径
给我一个图,G=(V,E),它是正加权的,有向的,无环的。我将设计一个运行在O(k(m+n))中的算法,用于报告从s到t的k边最短路径。k边最短路径定义为从s到t的具有k条边的路径,并且对于从s到t的所有路径,该路径的总权重也必须最小 由于BFS不能单独用于查找最短路径(除非权重相等),我认为运行时间意味着使用BFS查找具有k边的路径。让我不舒服的是k,因为我认为它意味着执行BFS k次Algorithm 正加权有向无环图的k边最短路径,algorithm,shortest-path,directed-acyclic-graphs,Algorithm,Shortest Path,Directed Acyclic Graphs,给我一个图,G=(V,E),它是正加权的,有向的,无环的。我将设计一个运行在O(k(m+n))中的算法,用于报告从s到t的k边最短路径。k边最短路径定义为从s到t的具有k条边的路径,并且对于从s到t的所有路径,该路径的总权重也必须最小 由于BFS不能单独用于查找最短路径(除非权重相等),我认为运行时间意味着使用BFS查找具有k边的路径。让我不舒服的是k,因为我认为它意味着执行BFS k次 我可能的想法是从源代码运行BFS,以找到所有可能的k-link路径。通过跟踪沿途的级别,并在将每个节点添加到
我可能的想法是从源代码运行BFS,以找到所有可能的k-link路径。通过跟踪沿途的级别,并在将每个节点添加到队列时存储其总路径权重,我可以找到所有可能的k-link路径及其权重。显然,如果我在较低的层次上遇到具有较低路径权重的目的地,则根据定义不存在k边最短路径。如果路径的总权重小于k条边,那么会发生什么情况?它也不是O(k(m+n))。任何有用的提示都将不胜感激。让
f[i][j]
成为从s
到j
的i-link最短路径,最初我们有
f[1][x] = e(s, x);
然后迭代K-1
次,每轮我们使用f[i][]
计算f[i+1][]
,这可以通过
for each node v:
f[i + 1][v] = INF;
for each edge e[u][v]:
f[i + 1][v] = min(f[i + 1][v], f[i][u] + e[u][v]);
因此,将
O(k(n+m))
设f[i][j]
为从s
到j
的i-link最短路径,最初我们有
f[1][x] = e(s, x);
然后迭代K-1
次,每轮我们使用f[i][]
计算f[i+1][]
,这可以通过
for each node v:
f[i + 1][v] = INF;
for each edge e[u][v]:
f[i + 1][v] = min(f[i + 1][v], f[i][u] + e[u][v]);
因此需要
O(k(n+m))
Dijkstra算法?Dijkstra算法?您还需要跟踪路径本身,而不仅仅是其成本。需要一个类似的数组父节点[i][j](i:步数,j:目标节点)。当在边(u,v)上迭代时,存储导致最小f[i+1][v]的u,您还需要跟踪路径本身,而不仅仅是其成本。需要一个类似的数组父节点[i][j](i:步数,j:目标节点)。在边(u,v)上迭代时,存储导致最小f[i+1][v]的u