循环有向图中的最短路径

Posted

技术标签:

【中文标题】循环有向图中的最短路径【英文标题】:the shortest path in cycle directed Graph 【发布时间】:2009-04-25 15:55:42 【问题描述】:

我需要一个有向图循环的最短路径示例,通过一个节点(它应该从阳极到达图的所有节点将是输入)如果有一个示例我需要它在 c++ 或算法中非常感谢.........

【问题讨论】:

欺骗***.com/questions/789159/cycle-directed-graph 【参考方案1】:

您需要为它找到minimum spanning tree。

对于根据***的有向图,您可以使用this 算法。

【讨论】:

算法链接:en.wikipedia.org/wiki/Chu–Liu/Edmonds_algorithm。我无法将链接放在我的答案中。【参考方案2】:

在伪代码中:

//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 将距离返回到起始节点。如果没有 返回到起始顶点的路径距离保持为∞。所有这些中的最小值 从变异的 Dijkstras 返回是最短路径。由于 Dijkstras 运行 最坏的情况是 O(|V|^2) 和 min_cycle 运行这种形式的 Dijkstras |V|时代周刊 找到最短周期的最终运行时间是 O(|V|^3)。如果 min_cyc 返回 ∞ 则图是非循环的。

要返回最短周期的实际路径,只需稍作修改即可。

【讨论】:

以上是关于循环有向图中的最短路径的主要内容,如果未能解决你的问题,请参考以下文章

Bellman-Ford算法——为什么要循环V-1次?图有n个点,又不能有回路,所以最短路径最多n-1边。又因为每次循环,至少relax一边所以最多n-1次就行了!

图中所有节点到特定节点的最短路径成本

求有向图两个顶点间的最短路径的方法,用简单语言或举例描述。

算法_最短路径

有向网络(带权的有向图)的最短路径Dijkstra算法

计算机网络的最短路径算法都有哪些?对应哪些协议?