点と点の距離の計算結果が.....

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
おすぎ

点と点の距離の計算結果が.....

#1

投稿記事 by おすぎ » 14年前

visualstudioのc言語で書いています
今、下にあるようなプログラムをいろいろ参考にしながら書いています。

コード:

#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であり
間違っていることがわかりました。
まだ未完成のプログラムのため、見づらいとは思いますが、どこを直せば正しい総距離がでるのかだけ教えていただけないでしょうか?

non
記事: 1097
登録日時: 15年前

Re: 点と点の距離の計算結果が.....

#2

投稿記事 by non » 14年前

前のほったらかしのスレッドとの関係は?
http://dixq.net/forum/viewtopic.php?t=9828&p=79228

あのときのアドバイスを無視したわけのわからないプログラムになっているようだが・・・別人?
non

おすぎ

Re: 点と点の距離の計算結果が.....

#3

投稿記事 by おすぎ » 14年前

non さんが書きました:前のほったらかしのスレッドとの関係は?
http://dixq.net/forum/viewtopic.php?t=9828&p=79228

あのときのアドバイスを無視したわけのわからないプログラムになっているようだが・・・別人?
はい、違います。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 点と点の距離の計算結果が.....

#4

投稿記事 by softya(ソフト屋) » 14年前

少なくとも同じ内容ですので、別の方なら名前を変更していただきたいです。
それと多分同じ学校の方の質問だと思いますので、前のトピックは参考になりませんか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

おすぎ

Re: 点と点の距離の計算結果が.....

#5

投稿記事 by おすぎ » 14年前

softya(ソフト屋) さんが書きました:少なくとも同じ内容ですので、別の方なら名前を変更していただきたいです。
それと多分同じ学校の方の質問だと思いますので、前のトピックは参考になりませんか?
わかりました。
名前を変えて改めて質問させていただきます。
ご迷惑おかけしました。

閉鎖

“C言語何でも質問掲示板” へ戻る