我需要一个节点的有向图循环的最短路径的例子(它应该从阳极到达所有节点的节点将是输入)请如果有一个例子我需要它在c ++或算法非常感谢.........
答案 0 :(得分:1)
您需要找到minimum spanning tree。
对于根据维基百科的有向图,您可以使用this算法。
答案 1 :(得分:1)
在伪代码中:
//INPUT: graph G = (V,E)
//OUTPUT: shortest cycle length
min_cycle(G)
min = ∞
for u in V
len = dij_cyc(G,u)
if min > len
min = len
return min
//INPUT: graph G and vertex s
//OUTPUT: minimum distance back to s
dij_cyc(G,s)
for u in V
dist(u) = ∞
//makequeue returns a priority queue of all V
H = makequeue(V) //using dist-values as keys with s First In
while !H.empty?
u = deletemin(H)
for all edges (u,v) in E
if dist(v) > dist(u) + l(u,v) then
dist(v) = dist(u) + l(u,v)
decreasekey(H,v)
return dist(s)
这在每个顶点上运行稍微不同的Dijkstra。突变的Dijkstras 有一些关键的区别。首先,所有初始距离都设置为∞,即使是 开始顶点。其次,必须先将起始顶点放在队列中才能生成 确保它首先出现,因为它们都具有相同的优先级。最后, mutated Dijkstras返回返回起始节点的距离。如果没有 路径返回起始顶点距离保持∞。所有这些中的最小值 从变异的Dijkstras返回是最短的路径。自Dijkstras运行 最糟糕的是在O(| V | ^ 2)和min_cycle运行这种形式的Dijkstras | V |时代, 找到最短周期的最终运行时间是O(| V | ^ 3)。如果min_cyc返回 ∞那么图是非循环的。
要返回最短周期的实际路径,只需稍作修改即可。