C/C++の宿題をやらせて、お兄ちゃん 22代目
■ このスレッドは過去ログ倉庫に格納されています
0227デフォルトの名無しさん
NGNG>点の数が任意であるため、単純なforループでは実装できませんでした。
これは再帰使えば解決できる。
>やはりGAなどを使ったほうがいいのでしょうか?
GA なんてご大層なもの使うほどの問題でもないような気がするけど。
で、枝刈りしながら再帰で探索する方法で作ってみた。座標はランダム初期化。
10点程度なら(よほどの悪条件でなければ)数秒もせず結果が出てくるはず(@PentiumM 1.3GHz)。
高速化のための工夫としては、
1.各点間の距離テーブルを最初に作成しておく
2.今までに発見された最短経路距離を越えた時点で探索を打ち切る(枝刈り)
3.次の点の候補を選ぶ際、距離の短い点から順に選ぶ
(早期により短い経路が発見されやすくなると期待できるので、枝刈りの効率が上がる)
4. 3.のための順序テーブルも最初に作成しておく
といったところ。
結果は多分正しいと思うけどちゃんと確認してない。
後、せっかく C++ だからってんで STL 使って余計見にくくなってしまったかもしれない。
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=55&fi=no
# 最初、「原点から」の部分を読み落としてたんだけどあまり変更せずに対応でけた
■ このスレッドは過去ログ倉庫に格納されています