2012-04-20 14 views
2

私はDijkstra's Algorithmを使って最短経路の問題に取り組んでいます。アルゴリズムが最短パスを提供するはずなので、私は問題を抱えていますが、アルゴリズムを実行した後、手で短絡してしまいます。これはちょうどこのアルゴリズムの副産物ですか?ダイクストラのアルゴリズムは最短経路を生成しませんか?

私は生成しようとしているパスからである - > Zここで

unmarked graph

は私が訪問した各頂点の最短距離のジャンプを取って、私はアルゴリズムを適用し得るパスです。

2 4 2 2 1 2 1 1 8  = 23 
a -> d -> g -> k -> r -> n -> q -> p -> t -> z 

Marked Graph

私はこのパスを取る場合ので、これは私に混乱して:

4 2 2 2 2 2 2  = 16 
a -> c -> f -> i -> m -> p -> s -> z 

私は、アルゴリズムから生成された距離よりも5少ない距離を取得します。

私はどこかで踏み間違いましたか?

+2

Dijkstra'sではなくGreedyアルゴリズムを実装しています。 – RBarryYoung

+0

この図はkneth Rosenのものです。私が正しいかどうかは... – pranavk

+0

@Hunter McMillen:上記のグラフをどうやって作りましたか教えてください。ありがとうございました – Chandrasekhar

答えて

3

Dijkstraのアルゴリズムの仕組みを誤解しているようです。各ノードで最小の重みでエッジをとるのではなく、常に最初からの距離(ノード$ a $)を考慮する必要があります。検討中のすべての可能なパスのヒープを維持します。これは、エッジのない開始ノードとして開始し、各ステップで現在検討しているパスにノードの各出力エッジを追加して展開します。

あなたがどこに間違っていたかを要約しようとする言葉の不安です。私はDijkstraのアルゴリズムがどのように動作するかを再読することをお勧めします:http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm

+0

ありがとう、私はそれを誤読する必要があります。 –

関連する問題