今、下にあるようなプログラムをいろいろ参考にしながら書いています。
#include "stdafx.h"
#include <math.h>
#define N 5 /* 点の個数 */
#define sq(a, b) ((data[a].x-data[b].x)*(data[a].x-data[b].x))+((data[a].y-data[b].y)*(data[a].y-data[b].y))
struct POINT{
double x,y; /* 座標用の変数 */
};
struct POINT data[N]={{0,0},{6,7},{3,5},{1,10},{10,6}}; /* 入力データ */
double v=2.0; /* 速度 */
double T=10.0; /* 目標散歩時間 */
double time; /* 総時間 */
double min = 1000000.0; /* 初期の長さ */
int flag[N]; /* 通ったか判定 */
double sum=0; /* 総距離 */
int root[N]; /* 通った点の配列 */
double goukei=0;
int o;
void search(double sum2,int n,int k){
int i,j,a;
++k;
if(k > N-2){
printf("start %4d (%7.2f,%7.2f) \n",0,data[0].x,data[0].y);
for(j=1;j<k;j++){
a=root[j];
printf("%4d %4d (%7.2f,%7.2f) \n",j,a,data[a].x,data[a].y);
}
printf("goul %4d (%7.2f,%7.2f) \n\n",4,data[4].x,data[4].y);
printf("総距離 : %lf\n\n",goukei+(sqrt(sq(o,4))));
return;
}
for(i=1;i<N-1;i++){
if(flag[i]==0){
goukei=sum2+(sqrt(sq(n,i)));
time=(goukei+(sqrt(sq(i,4))))/v;
/*printf("%lf\n",goukei);
printf("time=%lf\n",time);
printf("総距離=%lf\n",goukei+(sqrt(sq(i,4)))); */
//if(min > goukei+(sqrt(sq(i,4)))){
if(T < time){
printf("start %4d (%7.2f,%7.2f) \n",0,data[0].x,data[0].y);
for(j=1;j<k;j++){
a=root[j];
printf("%4d %4d (%7.2f,%7.2f) \n",j,a,data[a].x,data[a].y);
}
printf("goul %4d (%7.2f,%7.2f) \n",4,data[4].x,data[4].y);
//printf("総距離 %lf\n\n\n",goukei+(sqrt(sq(o,4))));
}else if(T >= time){
//printf("%lf\n",goukei+(sqrt(sq(i,4))));
flag[i]=1;
root[k]=i;
o=i;
n=i;
search(goukei,i,k);
flag[i]=0;
//}
}
}
}
}
int _tmain(int argc, _TCHAR* argv[]){
int i,j,a;
flag[0] = 1;
root[0] = 0;
search(0.0,0,0);
return 0;
}
start 0 ( 0.00, 0.00)
1 2 ( 3.00, 5.00)
2 3 ( 1.00, 10.00)
3 1 ( 6.00, 7.00)
goul 4 ( 10.00, 6.00)
総距離 : 19.390561
と言った様に出力されるのですが、総距離を実際に計算してみたところ、21.170174であり
間違っていることがわかりました。
まだ未完成のプログラムのため、見づらいとは思いますが、どこを直せば正しい総距離がでるのかだけ教えていただけないでしょうか?