私は有向グラフサイクルの最短経路を1つのノード(アノードからグラフの全ノードに届くはずです)の例が必要です。 C++またはアルゴリズムありがとうございました.........サイクル指向の最短経路グラフ
答えて
あなたはそれのためにminimum spanning treeを見つける必要があります。
ウィキペディアの有向グラフでは、thisアルゴリズムを使用できます。擬似コードで
algo:http://ja.wikipedia.org/wiki/Chu-Liu/Edmonds_algorithmへのリンク。私は私の答えにリンクを置くことができません。 – Naveen
:
//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)
これは各頂点にダイクストラのわずかに異なるが実行されます。突然変異したDijkstras にはいくつかの重要な違いがあります。最初に、すべての初期距離は∞に設定されます。 開始頂点でさえあります。第2に、最初に開始点をキューに入れる必要があります。 はすべて優先順位が同じであるため、最初にオフにすることを確認してください。最後に、 突然変異したDijkstrasは、開始ノードまでの距離を返します。開始点に戻る パスがなかった場合、距離は∞のままです。これらのすべての最小値は、突然変異したDijkstrasから返された が最短経路です。 DijkstrasはO(| V |^2)で最悪で を実行し、min_cycleはこの形式のDijkstras | V |を実行します。最後の実行時間はO(| V |^3)となる。 min_cycが ∞を返した場合、グラフは非周期的です。
最短サイクルの実際のパスを返すには、ほんのわずかな変更が必要です。
- 1. JGraphTグラフの最短経路
- 2. Matlabの有向グラフ最短サイクル
- 3. 非連続無向グラフの単一の最短経路
- 4. グラフ内の最短経路の数
- 5. 優先順位グラフの最短経路
- 6. 最短経路アルゴリズム
- 7. PostgreSQL - 最短経路
- 8. 義務的なノードを通過させた有向グラフの最短経路
- 9. dijkstraの最短経路アルゴリズム
- 10. Djikstraの最短経路アルゴリズム
- 11. ケビンベーコンゲームの最短経路グラフトラバーサル
- 12. 指定された頂点を通過する有向グラフの最短経路を見つける
- 13. Networkx - 最短経路長
- 14. 地下最短経路 - Java
- 15. 最短経路とダイクストラアルゴリズム
- 16. 最短経路変更
- 17. O(E)最短経路
- 18. C++ k最短経路アルゴリズム
- 19. 非加重グラフ内の隣接リストの最短経路
- 20. グラフの更新中に最短経路を維持する
- 21. グラフとプリントルーティングテーブルの最短経路を見つける
- 22. 重み付けされていないグラフの最短経路
- 23. Javascript - グラフのトラバーサル - 最短経路を返す
- 24. エッジが増加するグラフの最短経路
- 25. 双方向A *最短経路を見つけられない
- 26. グラフ - 再帰における最短経路
- 27. 最短経路、最低回転アルゴリズム
- 28. 最長最短経路(あまり)
- 29. Neo4jのスーパーノードのない最短経路
- 30. Dijkstraの最短経路アルゴリズムの変更
Dupe http://stackoverflow.com/questions/789159/cycle-directed-graph – krosenvold