私はDijkstraのアルゴリズムが負の重み付きグラフでは機能しないのを忘れてしまいました。私は、完全に探索されたノードを指すさらなるノードを持つすべての例を理解しています。しかし、この例は私の頭の中にあります。Dijkstraのアルゴリズムグラフを使ってこの負の重みについて正しい方法で考えていますか?
私はそれを考えるには正しいだろう。最初にA
が探索されます。 A->B
は1
となり、A->C
は100
となります。次にB
を調べ、B->D
を2
に設定します。次に、ソースに戻って最も短いパス(優先キューの先頭)が現在あるため、Dが探索されますか?
私はB->D
が100
だった場合、C
は(A->D
が101
あるので)最初に検討されてきただろうと言って、正しいでしょうか?
すべての説明で実際に言及しなかったことは、ノードが探索され/訪問されたことです.Dijkstraが優先キューで動作するため、これ以上更新できません。この場合、D
にはC
より前に訪問した理由を頭で囲むのは難しいです。
あなたは正しいです。このアルゴリズムは、ノードへの最短パスがキューから削除されたときに判明している場合にのみ機能し、後でノードに負の重み付きリンクがある場合は必ずしも真ではありません。 –
ありがとうございました。なぜあなたは答えとしてそれを置かないで、私はそれに目を向けるでしょう。 B-> Cを100に変更するという2番目の声明で正しいのですか? –
私の答えがサイトに多くの価値を追加するとは思わないので、誰かが素敵な説明をしたい場合に備えて、私は部屋を空けておきます。はい、あなたの2番目のステートメントは正しいです。 –