#include #include #include #define N 600 /* 地点数の最大サイズ */ #define ZERO 0 /* 許容誤差幅 */ #define SEED 39838 /* 乱数の種; これを変えると異なる初期解から              局所探索を行う */ struct point /* 構造体pの定義 */ { int x; int y; }; int n; /* 外部変数:点の個数 */ struct point p[N]; /* p[i].xとp[i].yは点iの座標 */ /* 関数の宣言 */ long int initial(int *x); long int local(int *init, long int lginit, int *lopt); long int length(int i, int j, int *x); void printtour(int *x, long int length); int rand_from(int min, int max); main() /* TSP局所探索法のテストプログラム */ { int i, k, init[N], lopt[N]; long int initlg, bestlg; FILE *file; file=fopen("att532", "r"); /* 入力データの読込 */ fscanf(file, "%d", &n); for(i=0; i0) { r=r-1; j=(j+1)%n; while(test[j]==1) j=(j+1)%n; } test[j]=1; x[i]=j; } lg=0.0; for(i=0; i