- ベストアンサー
Microsoft Visual Studio 2005の関数なのです
Microsoft Visual Studio 2005の関数なのです。 6地点への配達物がある。この5地点を1回だけとおり、移動距離が最小となる巡回順路を求めよ。 6地点の座標は次の通りである。 a(2,2), b(3,3), c(5,4), d(4,2), e(2,5), f(5,0)、ただし、第1番目はaを訪問することとする。 という問題があるのですが、これは、どうやってやればいいのでしょう? ここまでくると、もうサッパリです。 よろしければ、教えていただきたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
これは情報系の学校や学部の、解説例題(ある章の題)を丸出ししたのではないですか。 このコーナーは宿題の回答質問は、以前はご遠慮ください、であった。先生なりがいて、その説明があるはずし質問もすべきだから。 Googleでも「巡回セールスマン問題」で照会すれば沢山の記事はでて、例題もあるだろう。 それぐらい有名な問題で、ソートのアルゴリズムに比べれば、高級テーマ・課題のようだが。 (1)アルゴリズムの理解 (2)プログラム、この場合はVB2005か(VisualStudioには他の言語もある)で実装する方法 先行するのは(1)だからそちらから勉強してください。判らないところにぶっかったら WEBの記事を示して質問するのも手かな。 並みの文系プログラマーは使う機械が少ないのではないかな。だからWEBを読むほうが良かろう。 その記事は 経路が沢山合う場合の近似解 少ない場合の解法 どちらを解説して居るか注意
その他の回答 (1)
- magicalpass
- ベストアンサー率58% (378/648)
aを出発点としてその他の5点を回るルートを生成し、そのすべてに対して移動距離を求め、それが最小になるルートを求めれば良いだけです。数学の順列組み合わせとかも考える必要はありません。 (1)a~fの各点の使用有無を示す配列を作る (aは常に使用状態) (2)次のように4重のループで各ルートを生成する ・2番目の点についてb~fをループ ・3番目の点について未使用の点をループ ・4番目の点について未使用の点をループ ・5番目の点について未使用の点をループ 6番目のループが無いのは5番目が決まると残りは1点しかないので自動的に決まるからです。 (3)ルートにそって各点間の距離の合計を出し、それが最短のルートを保持しておく。 こんな感じで作っていけば難しくは無いはずです。