最短経路
最短経路
出発点とゴール地点を打ち込むと、自動的に最短経路を決定してそれを表示するプログラム
を教えてください。右の数字は交差点の数と隣接する町の番号です。
map.dat
1, 0.0, 0.0, Hirosakieki, 2, 2, 4
2, -0.6, 0.15, Daikanntyou, 3, 1, 3, 11
3, -0.83, 0.0, Kamidaikanntyou, 4, 2, 4, 9, 10
4, -0.6, -0.38, Omati, 3, 1, 3, 5
5, -0.38, -0.68, Matumori, 3, 4, 6, 7
6, 6.0, -0.3, Takada, 1, 5
7, -0.18, -1.02, Torikami, 2, 5, 8
8, -0.84, -1.58, Nakano, 3, 7, 9, 18
9, -0.9, -0.98, Hirosakidaigaku, 2, 3, 8
10, -0.98, 0.15, Runesugai, 3, 3, 11, 13
11, -0.78, 0.3, Hirosakiyuubinnkyoku, 3, 2, 10, 12
12, -1.28, 0.68, Motoderamati, 2, 11, 13
13, -1.32, 0.53, Ichibantyou, 4, 10, 12, 14, 15
14, -1.8, 0.98, Hirosakijou, 2, 13, 20
15, -1.43, -0.15, Douyamati, 2, 13, 16
16, -1.73, -0.26, sinntera, 3, 15, 17, 20
17, -1.8, -1.43, Asahigaoka, 3, 16, 18, 19
18, -1.2, -1.73, Nisihirosaki, 2, 8, 17
19, -2.48, -1.2, Shimizu, 2, 17, 20
20, -2.33, -0.51, Jumoku, 3, 14, 16, 19
を教えてください。右の数字は交差点の数と隣接する町の番号です。
map.dat
1, 0.0, 0.0, Hirosakieki, 2, 2, 4
2, -0.6, 0.15, Daikanntyou, 3, 1, 3, 11
3, -0.83, 0.0, Kamidaikanntyou, 4, 2, 4, 9, 10
4, -0.6, -0.38, Omati, 3, 1, 3, 5
5, -0.38, -0.68, Matumori, 3, 4, 6, 7
6, 6.0, -0.3, Takada, 1, 5
7, -0.18, -1.02, Torikami, 2, 5, 8
8, -0.84, -1.58, Nakano, 3, 7, 9, 18
9, -0.9, -0.98, Hirosakidaigaku, 2, 3, 8
10, -0.98, 0.15, Runesugai, 3, 3, 11, 13
11, -0.78, 0.3, Hirosakiyuubinnkyoku, 3, 2, 10, 12
12, -1.28, 0.68, Motoderamati, 2, 11, 13
13, -1.32, 0.53, Ichibantyou, 4, 10, 12, 14, 15
14, -1.8, 0.98, Hirosakijou, 2, 13, 20
15, -1.43, -0.15, Douyamati, 2, 13, 16
16, -1.73, -0.26, sinntera, 3, 15, 17, 20
17, -1.8, -1.43, Asahigaoka, 3, 16, 18, 19
18, -1.2, -1.73, Nisihirosaki, 2, 8, 17
19, -2.48, -1.2, Shimizu, 2, 17, 20
20, -2.33, -0.51, Jumoku, 3, 14, 16, 19
Re:最短経路
出発点とゴール地点を打ち込むと、自動的に最短経路を決定してそれを表示するプログラム
を教えてください。右の数字は交差点の数と隣接する町の番号です。 1行1行プログラムの説明もお願いします。
map.dat
1, 0.0, 0.0, Hirosakieki, 2, 2, 4
2, -0.6, 0.15, Daikanntyou, 3, 1, 3, 11
3, -0.83, 0.0, Kamidaikanntyou, 4, 2, 4, 9, 10
4, -0.6, -0.38, Omati, 3, 1, 3, 5
5, -0.38, -0.68, Matumori, 3, 4, 6, 7
6, 6.0, -0.3, Takada, 1, 5
7, -0.18, -1.02, Torikami, 2, 5, 8
8, -0.84, -1.58, Nakano, 3, 7, 9, 18
9, -0.9, -0.98, Hirosakidaigaku, 2, 3, 8
10, -0.98, 0.15, Runesugai, 3, 3, 11, 13
11, -0.78, 0.3, Hirosakiyuubinnkyoku, 3, 2, 10, 12
12, -1.28, 0.68, Motoderamati, 2, 11, 13
13, -1.32, 0.53, Ichibantyou, 4, 10, 12, 14, 15
14, -1.8, 0.98, Hirosakijou, 2, 13, 20
15, -1.43, -0.15, Douyamati, 2, 13, 16
16, -1.73, -0.26, sinntera, 3, 15, 17, 20
17, -1.8, -1.43, Asahigaoka, 3, 16, 18, 19
18, -1.2, -1.73, Nisihirosaki, 2, 8, 17
19, -2.48, -1.2, Shimizu, 2, 17, 20
20, -2.33, -0.51, Jumoku, 3, 14, 16, 19
を教えてください。右の数字は交差点の数と隣接する町の番号です。 1行1行プログラムの説明もお願いします。
map.dat
1, 0.0, 0.0, Hirosakieki, 2, 2, 4
2, -0.6, 0.15, Daikanntyou, 3, 1, 3, 11
3, -0.83, 0.0, Kamidaikanntyou, 4, 2, 4, 9, 10
4, -0.6, -0.38, Omati, 3, 1, 3, 5
5, -0.38, -0.68, Matumori, 3, 4, 6, 7
6, 6.0, -0.3, Takada, 1, 5
7, -0.18, -1.02, Torikami, 2, 5, 8
8, -0.84, -1.58, Nakano, 3, 7, 9, 18
9, -0.9, -0.98, Hirosakidaigaku, 2, 3, 8
10, -0.98, 0.15, Runesugai, 3, 3, 11, 13
11, -0.78, 0.3, Hirosakiyuubinnkyoku, 3, 2, 10, 12
12, -1.28, 0.68, Motoderamati, 2, 11, 13
13, -1.32, 0.53, Ichibantyou, 4, 10, 12, 14, 15
14, -1.8, 0.98, Hirosakijou, 2, 13, 20
15, -1.43, -0.15, Douyamati, 2, 13, 16
16, -1.73, -0.26, sinntera, 3, 15, 17, 20
17, -1.8, -1.43, Asahigaoka, 3, 16, 18, 19
18, -1.2, -1.73, Nisihirosaki, 2, 8, 17
19, -2.48, -1.2, Shimizu, 2, 17, 20
20, -2.33, -0.51, Jumoku, 3, 14, 16, 19
Re:最短経路
>>1, 0.0, 0.0, Hirosakieki, 2, 2, 4
>データの持つ意味を、正確に表してください。
憶測ですが
町ID, x 座標, y 座標, 町名, 隣接する町の数(移動できる分岐), 分岐できる町IDその1, 分岐できる町IDその2,・・・
というフォーマットかと思われます。
カーナビの劣化プログラム?みたいなのかな?
このような問題は解いたことがないので、まったくの素人の考えですが私なりの考え方を書いてみます。
と、おもったのですが、これって1点(出発地点か到着地点)から隣町へ移動したときおもう1点までの直線距離の変化を比べるだけじゃだめそうですね・・・。
(理由:その直線距離にして近いと思われた町からの分岐が結局遠くなることも、ありそうだから。)
実際どのようなマップになっているのか描画してみて、↑の方法でいけるかどうか判断できるかも。
もしくは、移動回数(町から町まで)を複数回ぐらい調査するとか。
といっても、ぱっと思いついた方法なので最良の方法ではないでしょうが・・・。
(町が増えたとき)重くてもいいなら、ルートを全部割り出して比べあうとか。
ただし、途中で同じ町にたどりついときにはぶつかったもう一方のルートとの距離を比べて短い方のみ残すとか。
ともかく、この手の問題は(私のように)解いたことがないなら実際に書いてみて試行錯誤するべきだと思います。
(あと実行結果をチェックする際はプログラムか手書きで視覚的に見たほうがいいでしょう。)
>データの持つ意味を、正確に表してください。
憶測ですが
町ID, x 座標, y 座標, 町名, 隣接する町の数(移動できる分岐), 分岐できる町IDその1, 分岐できる町IDその2,・・・
というフォーマットかと思われます。
カーナビの劣化プログラム?みたいなのかな?
このような問題は解いたことがないので、まったくの素人の考えですが私なりの考え方を書いてみます。
と、おもったのですが、これって1点(出発地点か到着地点)から隣町へ移動したときおもう1点までの直線距離の変化を比べるだけじゃだめそうですね・・・。
(理由:その直線距離にして近いと思われた町からの分岐が結局遠くなることも、ありそうだから。)
実際どのようなマップになっているのか描画してみて、↑の方法でいけるかどうか判断できるかも。
もしくは、移動回数(町から町まで)を複数回ぐらい調査するとか。
といっても、ぱっと思いついた方法なので最良の方法ではないでしょうが・・・。
(町が増えたとき)重くてもいいなら、ルートを全部割り出して比べあうとか。
ただし、途中で同じ町にたどりついときにはぶつかったもう一方のルートとの距離を比べて短い方のみ残すとか。
ともかく、この手の問題は(私のように)解いたことがないなら実際に書いてみて試行錯誤するべきだと思います。
(あと実行結果をチェックする際はプログラムか手書きで視覚的に見たほうがいいでしょう。)

Re:最短経路
> なるほど論点が判りました。しかし、遺伝的アルゴリズムの課題等という可能性は?
確かに…その可能性もありますね.
このくらいの問題ならば,他にもたくさん解法があるかもしれません.
ただ,課題だとするなら,ランダム性が絡む遺伝的アルゴリズムも評価がしにくいのでは…….
と,ここまで書いた所で
サンプルから弘前大学の課題かとアタリをつけて検索してみたら引っ掛かりました.
どうやら,C言語でダイクストラ法を実装する課題のようですね.
質問者さんが戻ってこられるかわかりませんが……
ダイクストラ法ならば,様々なサイトにソースが掲載されています.
それを見てもわからないようなら,その時に改めて『ちゃんとした態度で』質問して頂けたら,
解答が得られるのではないかと思います.
確かに…その可能性もありますね.
このくらいの問題ならば,他にもたくさん解法があるかもしれません.
ただ,課題だとするなら,ランダム性が絡む遺伝的アルゴリズムも評価がしにくいのでは…….
と,ここまで書いた所で
サンプルから弘前大学の課題かとアタリをつけて検索してみたら引っ掛かりました.
どうやら,C言語でダイクストラ法を実装する課題のようですね.
質問者さんが戻ってこられるかわかりませんが……
ダイクストラ法ならば,様々なサイトにソースが掲載されています.
それを見てもわからないようなら,その時に改めて『ちゃんとした態度で』質問して頂けたら,
解答が得られるのではないかと思います.