初めてトピを立てさせていただきます、よろしくお願いします
現在Dijkstra法を用いた最短経路のプログラム(電車の乗り換え案内の簡易版)をC#で構築しておりますが、どうしてもわからないことがあるので質問させていただきます。
Dijkstra法を文献やネットで調べたのですが、隣の点のコストを更新する概念は理解できましたが、どうしても「それぞれのノードに対して最短経路(コスト)が確定しているか、また未確定かを決める際の判定はどのように行えばいいか」がわかりません。具体的なソースではなく大まかな流れだけで大丈夫ですのでご存じの方いましたら御返事お願いします
駄文失礼しました
Dijkstra法を用いた最短経路問題
Re: Dijkstra法を用いた最短経路問題
以下のページは参考になりませんか?
http://www.deqnotes.net/acmicpc/dijkstra/
始点のノードが、コスト0で最初に確定するのは大丈夫ですよね。
それ以外のノードについては、
更新処理が終了したとき、未確定ノードのうち、最小のコストとなっているノードが確定ノードとなります。
なぜなら、そのようにして選んだノードは、確定ノード(すなわち、最小のコストで進んできたノード)から
最小のコストで到達できるノードだからです。
http://www.deqnotes.net/acmicpc/dijkstra/
始点のノードが、コスト0で最初に確定するのは大丈夫ですよね。
それ以外のノードについては、
更新処理が終了したとき、未確定ノードのうち、最小のコストとなっているノードが確定ノードとなります。
なぜなら、そのようにして選んだノードは、確定ノード(すなわち、最小のコストで進んできたノード)から
最小のコストで到達できるノードだからです。
Re: Dijkstra法を用いた最短経路問題
お返事ありがとうございます!
そのサイトも参考にしましたがいまいち・・・
自分が考えた流れは
①確定点の周りのノード(ただし未確定のみ)のコストを更新
②その中で一番小さいコストをもつノードを確定
③①に戻る
④全てのノードが確定したら終了
という考え方をとったのですが、そのサイトは確定点も更新しているようなので混乱してしまっています・・・
そもそも上の考え方が間違ってしまっているのでしょうか??何度もすいません・・・
そのサイトも参考にしましたがいまいち・・・
自分が考えた流れは
①確定点の周りのノード(ただし未確定のみ)のコストを更新
②その中で一番小さいコストをもつノードを確定
③①に戻る
④全てのノードが確定したら終了
という考え方をとったのですが、そのサイトは確定点も更新しているようなので混乱してしまっています・・・
そもそも上の考え方が間違ってしまっているのでしょうか??何度もすいません・・・
Re: Dijkstra法を用いた最短経路問題
考え方はそれで合っていますよ。
確定点も含めて更新処理を行っても、確定点のコストが変わることはありません。
(確定点から行って戻ってくるような経路を考えることになる)
そうしないと、「確定」の意味がありませんよね。
ですから、更新処理の対象に確定点が含まれていても、問題はありません。
更新処理の対象から確定点を除くかどうかは、(効率面など)各人の判断で決めればいいでしょう。
確定点も含めて更新処理を行っても、確定点のコストが変わることはありません。
(確定点から行って戻ってくるような経路を考えることになる)
そうしないと、「確定」の意味がありませんよね。
ですから、更新処理の対象に確定点が含まれていても、問題はありません。
更新処理の対象から確定点を除くかどうかは、(効率面など)各人の判断で決めればいいでしょう。
Re: Dijkstra法を用いた最短経路問題
なるほど、サイトを見なおしてみたら確定も探索はしていますが更新はしていませんね!!
もう一度考えてみます、もしかしたらまた質問するかもしれません(・_・;)
その時はよろしくお願いします!
もう一度考えてみます、もしかしたらまた質問するかもしれません(・_・;)
その時はよろしくお願いします!