• ベストアンサー

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/17068)
回答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

  • 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地点(x1,y1),(x2,y2)の距離は、√(x1-x2)^2+(y1-y2)^2で算出できるとあります。 そして、もう一つのヒントが、地点a,b,c,d,e,fを1から6の地点とする。 第1の地点、第2の地点。。。第6の地点の地点に対して、1から6を割り当てる。 たとえば、経路として 1-2-3-4-5-6 は一巡の経路になる。一方、1-2-1-3-4-5と なる経路は、a-b-aというように元に戻っているので一巡の経路ではない。 このように、第1の地点に1から6、第2の地点に1から6のように、第1の地点から 第6の地点のそれぞれを1から6の割り当てを行う。この中で、一度、割り当てた地点 が再度割り当てられて場合は、一巡経路でないとして組み合わせから外せば、一巡 経路を求めることができる。その一巡経路の距離を算出し、最短の経路を求めるプロ グラムを作成する。 もうお手上げ状態なので、どなたかわかる方がいましたら、教えて欲しいです。 よろしくお願いします。

  • 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地点(x1,y1),(x2,y2)の距離は、√(x1-x2)^2+(y1-y2)^2で算出できるとあります。 そして、もう一つのヒントが、地点a,b,c,d,e,fを1から6の地点とする。 第1の地点、第2の地点。。。第6の地点の地点に対して、1から6を割り当てる。 たとえば、経路として 1-2-3-4-5-6 は一巡の経路になる。一方、1-2-1-3-4-5と なる経路は、a-b-aというように元に戻っているので一巡の経路ではない。 このように、第1の地点に1から6、第2の地点に1から6のように、第1の地点から 第6の地点のそれぞれを1から6の割り当てを行う。この中で、一度、割り当てた地点 が再度割り当てられて場合は、一巡経路でないとして組み合わせから外せば、一巡 経路を求めることができる。その一巡経路の距離を算出し、最短の経路を求めるプロ グラムを作成する。 もうお手上げ状態なので、どなたかわかる方がいましたら、教えて欲しいです。 よろしくお願いします。

  • Microsoft Visual Studio 2005の関数なのです

    Microsoft Visual Studio 2005の関数なのです Microsoft Visual Studio 2005の関数なのですが・・・ 今まではこういう風にやっていたのですが・・・ #include<stdio.h> int main() { double a,b,n; a=10.0; b=20.0; printf("実数A=%f",a); printf("\n実数B=%f",b); n=a+b; printf("\n加算:%lf\n",n); return 0 } 今日から関数を使うことになりました。 関数を使ったやり方がわからないので、教えていただきたいです。 問題は… 2つの実数X,Yを定義し、それぞれ、20.0, 30.0 を代入した後、その加算、減算、積算、除算、あまりの算出を関数を用いて行い、その結果が画面に表示せよ。除算の場合の割る値が0の場合は、エラーを画面に表示すること。 よろしくお願いします。 ちなみに、言語はC++です。

  • Microsoft Visual Studio 2005の関数なのです

    Microsoft Visual Studio 2005の関数なのですが・・・ 今まではこういう風にやっていたのですが・・・ #include<stdio.h> int main() { double a,b,n; a=10.0; b=20.0; printf("実数A=%f",a); printf("\n実数B=%f",b); n=a+b; printf("\n加算:%lf\n",n); return 0 } 今日から関数を使うことになりました。 関数を使ったやり方がわからないので、教えていただきたいです。 よろしくお願いします。 ちなみに、言語はC++です。

  • Microsoft Visual Studio 2005の関数なのです

    Microsoft Visual Studio 2005の関数なのですが・・・ 今まではこういう風にやっていたのですが・・・ #include<stdio.h> int main() { double a,b,n; a=10.0; b=20.0; printf("実数A=%f",a); printf("\n実数B=%f",b); n=a+b; printf("\n加算:%lf\n",n); return 0 } 今日から関数を使うことになりました。 関数を使ったやり方がわからないので、教えていただきたいです。 問題は… 2つの実数X,Yを定義し、それぞれ、20.0, 30.0 を代入した後、その加算、減算、積算、除算、あまりの算出を関数を用いて行い、その結果が画面に表示せよ。除算の場合の割る値が0の場合は、エラーを画面に表示すること。 よろしくお願いします。 ちなみに、言語はC++です。

  • Microsoft Visual Studio

    Microsoft Visual Studioで、今VBを勉強しています。参考書は VB6.0の本を使っているのですが、本には、LoadPictureという関数を使うとあるのですが、実行しても、名前'LoadPictureは宣言されていませんとでます。どうしですか、教えてください。宜しくお願いします。

  • すみません。初心者です。Microsoft Visual Studio

    すみません。初心者です。Microsoft Visual Studioはいつも変化していっていますが、ちょっと前は"C#"、今度は"F"などという言語を予定していると言われています。 "C#"には非常に興味がわくのですが、「メモリー管理を自動的にやってくれる」というのは、本当にそうなのでしょうか?どの程度正確にやってくれるのでしょうか?勉強する意味はあるのでしょうか? さらに"F"は関数言語だと聞いています。おそらく"function'から来ている言葉だと思います。関数言語なら、以前から"lisp"という言語があります。MSはどういうふうに差異をつけるのでしょうか? 初心者ですので、分かりやすくご説明いただける方、よろしくお願いいたします。

  • Microsoft Visual Studio .NET 2003について

    Microsoft Visual Studio .NET 2003を学校で使っているのですが、困ったことが起きてしまいました。 いつも授業で課題のプログラムを作り「デバック無しで開始」で動かしています。 今日は文字列の練習で、いつも通り動かして出てくるウィンドウに単語(東京や北海道)を打って文字列の長さを調べたりしていたのですが、何題か問題を解いているうちに、突然ウィンドウ内で日本語入力が出来なくなりAやa、1といった英数字しか入力できなくなりました。 たぶんどこかのキーを間違えて押してこうなったのではないかと思うのですが、直し方が分かりません^^; 直し方が分かる方がいましたら、教えていただきたいですm(_ _)m

  • mecabというアプリケーションをvisual studio 2010

    mecabというアプリケーションをvisual studio 2010を用いてC言語で実行したいのですが、どのようにすればいいのか分からず困ってます。 mecabの中にあるヘッダファイルは C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include に入れたらincludeしてくれたのですが、実行してみると 未解決の外部シンボル __imp__mecab_destroy が関数 _main で参照されました。 となってしまいうまくコンパイルできません。 ヘッダファイルのほかにどのファイルをどこに入れたらいいのか もしわかる方がいれば教えていただけますか?

  • Visual Studio 2008 が動作しない

    いままで使えていたのが、突然出来なくなった。 その前に行ったことは、Tao関数を動作させるため、 Visual Studio 2019 2017 2015(Community版)  2012 2010(Professinal版)を順に一時的にインストルして動作させました。結果は良かったのですが、元の 2008のに戻ったら動作しないで、以下のエラーがでます。 MsBuildToolPathがToolVersion14de指定されない、その場所は "HKEY LOCAL MACHINE\Software\Microsoft\MsBuild\Toolversion14" or the value specified evaluetes to the String と表示されます。  REGEDITでみても、Toolversion14はありません。 インストールしたVisual studio 2017 2019などすべて削除し、ついでに2008も削除し 2008は再インストールして見ました  結果は、同じで、動作しません。 何とか、動作させたいのですが、  ご存じの方がいらっしゃれば、ご教授をお願いいたします。 2008のソフトは、他のVisual Studioがなにも入っていない別のPCけでは動作します。そこからREGデータをコピーしていれましたが、うまくゆきません。   どうかよろしく、お願いいたします。

専門家に質問してみよう