スタート地点から最も近い点へ移動を繰り返すというプログラムをつくっている最中なのですがループと値の初期化などがいろいろ入り混じってわからなくなってしまいました。
このプログラムは別のテキストファイルをリダイレクトして(
1 1.987942879 1.57248592
2 1.098790874 2.52409582
・
・
・
1400 5.8437209872 6.0298477)のようなファイルを読み込んで作動するのですが、(初めはその都市の番号、2番目はx座標 3番目は座標)配列X[j],Y[j]に値を入れてから、
初めのスタート地点を
tour[0]=0,
次に通る都市をtour[1]=5(←例えば)としたいのですがそのあたりのループと値の初期化などがわからなくなってしまいました。
どう改善すればこのプログラムは正常に動くのでしょうか。
回答よろしくお願いします。
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main(){
double x, y;
int i, j, tour[1400], d;
char buf[256];
double X[1400], Y[1400];
FILE *fp;
int min;
j=0;
while(fgets(buf, 256, stdin)!=NULL){
sscanf(buf, "%d %lf %lf", &i, &X[j], &Y[j]); //配列に座標を格納
tour[0] = 0;
min=100;
for(j=0;j<1400;j++){
for(i=1;i<1400 && i!=j;i++){
d=distance(i,j);
if(d<min){
min=d;
tour[j]=j;
//j=-1;
printf("tour[%d]=%d\n", j,tour[d]);
min=100;
}
}
// }
j++;
//printf("x=%lf, y=%lf, z=%lf\n", x,y,z);
//printf("tour[%d]=%d", j,tour[j]);
// printf("%lf %lf\n", X[tour[j]], Y[tour[j]]);
}
}
for(i = 0; i < 1400; i++){
// printf("%lf %lf\n", X[i], Y[i]);
}
return 0;
}
int distance(int a, int b)
{
double xd, yd, X[1400], Y[1400];
xd = X[a]-X[b];
yd = Y[a]-Y[b];
return (int)(sqrt(xd*xd+yd*yd) + 0.5);
}