• ベストアンサー

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を訪問することとする。 という問題があるのですが、これは、どうやってやればいいのでしょう? ここまでくると、もうサッパリです。 よろしければ、教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

これは情報系の学校や学部の、解説例題(ある章の題)を丸出ししたのではないですか。 このコーナーは宿題の回答質問は、以前はご遠慮ください、であった。先生なりがいて、その説明があるはずし質問もすべきだから。 Googleでも「巡回セールスマン問題」で照会すれば沢山の記事はでて、例題もあるだろう。 それぐらい有名な問題で、ソートのアルゴリズムに比べれば、高級テーマ・課題のようだが。 (1)アルゴリズムの理解 (2)プログラム、この場合はVB2005か(VisualStudioには他の言語もある)で実装する方法 先行するのは(1)だからそちらから勉強してください。判らないところにぶっかったら WEBの記事を示して質問するのも手かな。 並みの文系プログラマーは使う機械が少ないのではないかな。だからWEBを読むほうが良かろう。 その記事は 経路が沢山合う場合の近似解 少ない場合の解法 どちらを解説して居るか注意

その他の回答 (1)

回答No.1

aを出発点としてその他の5点を回るルートを生成し、そのすべてに対して移動距離を求め、それが最小になるルートを求めれば良いだけです。数学の順列組み合わせとかも考える必要はありません。 (1)a~fの各点の使用有無を示す配列を作る  (aは常に使用状態) (2)次のように4重のループで各ルートを生成する  ・2番目の点についてb~fをループ  ・3番目の点について未使用の点をループ  ・4番目の点について未使用の点をループ  ・5番目の点について未使用の点をループ  6番目のループが無いのは5番目が決まると残りは1点しかないので自動的に決まるからです。 (3)ルートにそって各点間の距離の合計を出し、それが最短のルートを保持しておく。 こんな感じで作っていけば難しくは無いはずです。

関連するQ&A