巡回経路の2-opt法による改良法
以下の、探す関数と改良を行う関数では、すべての点から一つの枝の組み合わせでしか動かなかったのですが、
すべての枝で行うようにするにはどこをどのようにしたらいいのですか?
// for cygwin //
int Find_cd(int i,int x[MAX_N],int y[MAX_N], int n,int tour[MAX_N]){
int k,l,temp;
int city_a,city_b,city_c,city_d,ax,ay,bx,by,cx,cy,dx,dy;
double abcd_dis,acbd_dis;
for(k=i+1;k<=n; k++){// 訪問順k,k+1(=l)番目の枝 cd
l=k+1;
if( k==n ) l=1;
city_a=tour; city_b=tour[i+1]; city_c=tour[k]; city_d=tour[l];
ax = x[city_a]; ay = y[city_a]; bx = x[city_b]; by = y[city_b];
cx = x[city_c]; cy = y[city_c]; dx = x[city_d]; dy = y[city_d];
abcd_dis=dist(ax,ay,bx,by)+ dist(cx,cy,dx,dy); // |ab|+|cd|
acbd_dis=dist(ax,ay,cx,cy)+ dist(bx,by,dx,dy); // |ac|+|bd|
if( abcd_dis > acbd_dis ) { // |ab|+|cd|>|ac|+|bd|
return( k ); // 訪問順k番目を関数の戻り値とする.
}
}
return(0); // 改良する枝cdが無ければ0が戻り値
}
int TwoOpt(int x[MAX_N], int y[MAX_N], int n, int tour[MAX_N]){
int i,k,p,q;
for(i=1;i<n && (k=Find_cd(i,x,y,n,tour)) == 0;i++); // 改良可能な枝ab,cdの発見
if( k == 0 ) return(0); // 改良する枝ペアがなければ0を戻り値とする.
if( i+1 < k ){ p=i+1; q=k;} else{ p=k; q=i+1; }
while( p<q ){ swap(tour[p],tour[q]); p++; q--;}
// 枝ペアab,cdがあれば都市aからcへ,都市bからdへ,都市bc間の訪問順を逆転.
return(i);
// 改良する枝abの都市aの訪問順が戻り値.
}
巡回路の2-opt法による改良
ページ移動
- 掲示板
- ↳ C言語何でも質問掲示板
- ↳ 四聖龍神録2 掲示板
- ↳ 四聖龍神録Plus掲示板
- ↳ AerobeatPlus掲示板
- 副次コンテンツ
- ↳ 作品お披露目掲示板
- 登録ユーザー用コンテンツ
- ↳ 登録ユーザー掲示板
- コミュニティフォーラム
- ↳ みんなでソースコードをレビューしよう
- ↳ 3DCGソフト使用者のコミュ
- ↳ Win32 API
- ↳ 組み込み系スクリプト言語をつかってみよう
- ↳ 東方好きあつまれ
- ↳ C言語誰でも交流サイト - mixC++ -
- ↳ ビット論理演算が好きな人♪
- ↳ 企画関係について語ろうか
- ↳ エフェクトアニメーション
- ↳ 学生で集まってみる?
- ↳ DirectX SDK
- ↳ マイコン/FPGA電子工作部
- ↳ PHPに可能性を無限大
- ↳ Code Golf を楽しもう!
- ↳ 作曲している人で話し合ってみませんか♪
- ↳ ソフト制作コミュ
- ↳ El Shaddai - エルシャダイ -
- ↳ PSPプログラミング
- ↳ CINEMA 4D
- ↳ お絵かきコミュニティ
- ↳ 素材作ってみたよ!
- ↳ OpenGL
- ↳ OpenCV
- ↳ RPGを作りたい!
- ↳ ポケモン好き集まれ
- ↳ ならば .NETをやらないか?
- ↳ 1から勉強してみないか?
- ↳ 赤髪超大好き♪
- ↳ ノースリーブ
- ↳ 伝説の戦士プリキュアを語ろう
- ↳ コンテストコミュニティー
- ↳ DXライブラリ何でも質問コミュニティ
- ↳ 四聖龍神録コミュニティ
- ↳ HTML/CSS/JavaScript
- ↳ 生放送コミュ
- ↳ サンプルを共有するコミュニティ
- ↳ おすすめマーカー
- ↳ minecraft
- ↳ Xtal Language
- ↳ マインクラフト
- ↳ 数学やらないか?
- ↳ 習ったことをプログラムで表してみよう!
- ↳ 小物アプリ作成や ら な い か
- ↳ AIの可能性は無限大
- ↳ 自作OS製作(GUI入門)[雑談]
- ↳ リレーコーディング
- ↳ Unix/Linux
- ↳ 競技プログラミングごっこやろうぜ
- ↳ 夏休みプログラミングイベント2012 in MixC++
- ↳ D言語を広めよう
- ↳ Scala布教の会
- ↳ 3Dゲーム作ろうぜ!モデリング~プログラミングまで
- ↳ 言語に興味を持ったら是非!!
- ↳ レイヴンズ・ネスト
- ↳ C言語とC++言語のコミュニティー!
- ↳ 放課後ふぁんたじあ
- ↳ マイ サンプルズ
- ↳ ガンヲタの館
- ↳ 歯科機器
- ↳ 歯科機器情報
- ↳ 52歳からはじめるC言語
- mixC++更新・仕様変更履歴