巡回セールスマン問題の二都市間の距離を求める問題

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

巡回セールスマン問題の二都市間の距離を求める問題

#1

投稿記事 by ファイブマン » 12年前

こんにちは。巡回セールスマン問題で、関数distanceで2都市間の距離を測る関数を用いてそれをmain関数と対応させ、
スタート地点から最も近い点へ移動を繰り返すというプログラムをつくっている最中なのですがループと値の初期化などがいろいろ入り混じってわからなくなってしまいました。
このプログラムは別のテキストファイルをリダイレクトして(
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);
}

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

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#2

投稿記事 by non » 12年前

ループの基本ができていないですね。
インデントができないから、繰り返しのの整理がつかないのです。
一番の問題は、データをすべて読み込んでいないのに距離を求めようとしていること。
すべてのデータを読み込んでしまってから、あらためて、距離を計算しましょう。
non

box
記事: 2002
登録日時: 13年前

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#3

投稿記事 by box » 12年前

ファイブマン さんが書きました:

コード:

int distance(int a, int b)
{
  double xd, yd, X[1400], Y[1400];
  
  xd = X[a]-X[b];
  yd = Y[a]-Y[b];
X[]とY[]にはどんな値が入っているかわかりません。
それを使って距離を計算しても、正しい結果はおそらく得られないことでしょう。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

beatle
記事: 1281
登録日時: 12年前
住所: 埼玉
連絡を取る:

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#4

投稿記事 by beatle » 12年前

main関数の中にある配列XやYと、distance関数の中にある配列XやYが「同じ物である」とファイブマンさんは考えているのでしょうか。
確かに名前は同じですが、それらはまったくの別物です。
もし、main関数のXとdistance関数のXが違うものであることが理解できないなら、「スコープ」について学んで下さい。

box
記事: 2002
登録日時: 13年前

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#5

投稿記事 by box » 12年前

ところで、1400都市を全部巡回したいのでしょうか。
もしそうだとすると、最短ルートを求めるのと地球が滅亡するのと、どちらが先でしょうね。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

box
記事: 2002
登録日時: 13年前

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#6

投稿記事 by box » 12年前

厳密解ではなく近似解を求めたい、ということでしたら、
地球が滅亡する前には求まると思います。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

ファイブマン

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#7

投稿記事 by ファイブマン » 12年前

スコープについては忘れていました.
グローバル変数としてX[1400],Y[1400]は定めることにしました.

コード:

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
double X[1400], Y[1400];
int main(){
........

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=0;i<1400 && i!=j;i++){
	d=distance(i,j);
	if(d<min){
	  min=d;
	  tour[j]=j;
	 
	  printf("tour[%d]=%d\n", j,tour[d]);
	  min=100;
	}
      }
      
      j++;
    
    }
......
このwhileループの中の,ファイルの中身を読み込むsscanfより下ががおかしいと思うのですが,どう改善すれば良いのでしょうか.
この時点ではまず入力ファイルの内容は読み込めていないのでしょうか.
それと,今は最短のルートを求めたいのでどれだけかかっても,時間は問いません

beatle
記事: 1281
登録日時: 12年前
住所: 埼玉
連絡を取る:

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#8

投稿記事 by beatle » 12年前

nonさんが言うように、ソースコードのインデントをしっかり直してみる、というのはいかがでしょうか。
インデントのやり方はこちら投稿前チェックリストを参考にしてください。

whileループの中で、変数jは何に使われているのか、ご説明ください。

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

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#9

投稿記事 by non » 12年前

再度投稿
non さんが書きました:一番の問題は、データをすべて読み込んでいないのに距離を求めようとしていること。
すべてのデータを読み込んでしまってから、あらためて、距離を計算しましょう。
non

ファイブマン

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#10

投稿記事 by ファイブマン » 12年前

non さんが書きました:一番の問題は、データをすべて読み込んでいないのに距離を求めようとしていること。
すべてのデータを読み込んでしまってから、あらためて、距離を計算しましょう。
これにいたる前はとりあえずファイルの中身を読み込む仕様にしたのですが,その後距離計算をしようと,いろいろいじったりしているうちに読み込む部分を消してしまったようです

とりあえずファイルの中身は読み込み,そして2都市間の距離の計算に移ろうと思うのですが,
初めはX[0],Y[0]に格納した値を関数int distanceのaに設定し,bにはX[0],Y[0]以外のX[1],Y[1]~X[1400],Y[1400]までの値を入れていき,その中で返される値が最も小さい値の時のbをtour[1]=bとしたいと考えています.
さらに,次はaのところにbを代入し,bにはまたX[0],Y[0],X[さきほどのb],Y[さきほどのb]以外/のX[1],Y[1]~X[1400],Y[1400]までの値を入れていき,その中で返される値が最も小さい値の時のbをtour[2]=b.....
最終的に1400すべての都市を回るルートを作成したいと思うのですが,ループがうまくいきません.

僕の考えとしては,
1.関数distanceで計算した最も小さい値をint minとして,初期値を適当に100.0とでもしておく
2.関数distanceで計算した値dがminより小さい時min=dとし,そのときのlをtour[1]=lとする
3.すでに通った都市にはフラグをつける
4.以下,tour[1400]までループを続ける

とすればうまくいくと考えています.それをわかる範囲でやったところ,以下のようになりました.あとは息詰まってしまいました.この後どうすれば動くでしょうか.
解答宜しくお願いします.

コード:

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
 double X[1400], Y[1400];
int main()
{
  int i, j,k,l, tour[1400], d;
  char buf[256];
  FILE *fp;
  int min;
  min=100;
  j=0;
  while(fgets(buf, 256, stdin)!=NULL)
    {
      
      sscanf(buf, "%d %lf %lf", &i, &X[j], &Y[j]);  //配列に座標を格納
     
      j++;
    }
  tour[0] = 0;
  for(k=0;k<1400;k++)
    {
      for(l=1;l<1400;l++)
	{
	  d=distance(k,l);
	  if(d<min)
	    {
	      min=d;
	      tour[k]=l;
	      l=-1;
	      printf("tour[%d]=%d\n", l,tour[k]);
	      min=100;
	    }
	  
	}
    }
  

  
  
  return 0;
}

int distance(int a, int b)
{
  double xd, yd;
  
  xd = X[a]-X[b];
  yd = Y[a]-Y[b];
  
  return (int)(sqrt(xd*xd+yd*yd) + 0.5);
}

ちなみにこれで実行すると
tour[-1]=1
tour[-1]=1
tour[-1]=1



と無限ループしてしまいました

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

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#11

投稿記事 by non » 12年前

なんかあっちこっち変で、どう説明してよいかわからないので、
ファイブマンさんの考え方に沿うようにサンプルを作りました。

コード:

#include <stdio.h>
int main(void)
{
	int d[]={2,10,3,5,4};
	int flag[5]={0};
	int i,j,min,min_locate;
	for(i=0;i<5;i++){
		min=100;
		for(j=0;j<5;j++){
			if(flag[j]==0){
				if(d[j]<min){
					min=d[j];
					min_locate=j;
				}
			}
		}
		flag[min_locate]=1;
		printf("%d %d\n",min_locate,min);
	}
	return 0;
}
最近はインデントを正しくとらないのが流行りでしょうか?
non

beatle
記事: 1281
登録日時: 12年前
住所: 埼玉
連絡を取る:

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#12

投稿記事 by beatle » 12年前

26行目のif文で、d<minをチェックしているのは良いと思うのですが、そのif文の中身で
minに100を代入していますね。
これでは最小値を求められませんよね。

それから、ループカウンタであるlに-1を代入していますから、当然forループの条件l<1400は
常に成り立って、無限ループします。

と書いているうちにnonさんが返信してしまいましたが、もったいないので投稿。

box
記事: 2002
登録日時: 13年前

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#13

投稿記事 by box » 12年前

ファイブマン さんが書きました: それと,今は最短のルートを求めたいのでどれだけかかっても,時間は問いません
1400都市をすべて巡回するのに要する「厳密な最短ルート」を求めるのは、
現実的ではないと思います。
以前の回答に書きましたが、質問者さんがお持ちの環境では、
おそらく、地球が溶けてなくなる日までには解けないと思います。

# スーパーコンピューター「京」では何年かかるかな?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

ファイブマン

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#14

投稿記事 by ファイブマン » 12年前

beatle さんが書きました:26行目のif文で、d<minをチェックしているのは良いと思うのですが、そのif文の中身で
minに100を代入していますね。
これでは最小値を求められませんよね。
最小値を導き出した後にif文を抜けてからminを適当な大きな値(100)に戻せばいいのでしょうか。

beatle さんが書きました: それから、ループカウンタであるlに-1を代入していますから、当然forループの条件l<1400は
常に成り立って、無限ループします。
どう表現すれば既に通った都市にフラグをつけることができるのでしょうか。
box さんが書きました: 1400都市をすべて巡回するのに要する「厳密な最短時間」を求めるのは、
現実的ではないと思います。
今回は時間は問わず、とりあえず全ての都市を回るルートが得られればいいみたいです。

皆さん、回答ありがとうございます。そしてよろしくお願いします。

たいちう
記事: 418
登録日時: 13年前

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#15

投稿記事 by たいちう » 12年前

> 今回は時間は問わず、とりあえず全ての都市を回るルートが得られればいいみたいです。

それならば、1番から1400番まで順番に都市を回ればよいのでは?
1400!と比べて非常に現実的ですが、そういうこと?

beatle
記事: 1281
登録日時: 12年前
住所: 埼玉
連絡を取る:

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#16

投稿記事 by beatle » 12年前

ファイブマン さんが書きました:最小値を導き出した後にif文を抜けてからminを適当な大きな値(100)に戻せばいいのでしょうか。
ファイブマン さんが書きました:どう表現すれば既に通った都市にフラグをつけることができるのでしょうか。
No11のnonさんの投稿を御覧ください。5つの要素を持つ配列dから最小の値を見つけるプログラムです。
flagが過去に選んだかどうかのフラグになっています。flagが0であるようなdの要素の中から最小の要素を見つけます。
これが最小の要素を見つける基本形ですから、勉強してください。
(ループの中で変数を表示するなり、紙に動作を書いてみるなりして、頑張って勉強してください)

ファイブマン

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#17

投稿記事 by ファイブマン » 12年前

すみません,少し離脱するんですが,いろいろいじっているうちにファイル読み込みさえ表示されなくなってしまいました.
その部分だけ記載すると,

コード:

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
 double X[1400], Y[1400];
int main()
{
  int i, j,k,l, tour[1400], d;
  char buf[256];
  FILE *fp;
  int min;
  min=100;
  j=0;
  while(fgets(buf, 256, stdin)!=NULL) {
      
    sscanf(buf, "%d %lf %lf", &i, &X[j], &Y[j]);  //配列に座標を格納
    printf("%lf, %lf\n", &X[j], &Y[j]); 
    j++;
  } 
   return 0;
}
のようになり,出力が
0.000000, 0.000000
0.000000, 0.000000
0.000000, 0.000000
0.000000, 0.000000



となってしまいました;;
昨日投稿した時は表示されていたのですがどこがおかしいのかわかりません.
回答よろしくお願いします.

それと,前回の回答ではありがとうございました.もっと勉強して,またつまづいたら質問したいと思います.

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

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#18

投稿記事 by non » 12年前

> printf("%lf, %lf\n", &X[j], &Y[j]);
ここには2種類の間違いが含まれています。
non

ファイブマン

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#19

投稿記事 by ファイブマン » 12年前

すみません。上の投稿、なかったことにしてください。
お騒がせしてすみません。

ファイブマン

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#20

投稿記事 by ファイブマン » 12年前

nonさん,せっかく即答していだだいたのに申し訳ありません.
今,関数distanceの計算方法について考えているのですが,
初めひとつの都市を選び,そこからのその他の1399の都市との距離を計算し,一番小さい値をだした値をminにしたいと考えています.
しかし,ループをどのように組み合わせていいかがわかりません.
iもjも0から初めてdistance(i,j)とするとdistance(0,0)となり0になり...ますよね?

コード:

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
double X[1400], Y[1400];

int main(){
  int i, j, k, tour[1400];
  int min_locate;//都市番号
  char buf[256];
  FILE *fp;
  int min;
  int flag[1400] = {0}; 
  int d[1400]={0};
  k=0;
  while(fgets(buf, 256, stdin)!=NULL){
    sscanf(buf, "%d %lf %lf", &i, &X[k], &Y[k]);  //配列に座標を格納
    k++;
  }
    tour[0] = 0;
    for(i=0;i<1400;i++) {
      min=100;
      for(j=0;j<1400;j++) {
      d[i]=distance(i,j);
      // printf("%d, %d\n", i, d[i]);
      for(j=0;j<1400;j++){
	if(flag[j]==0){
	  if(d[i]<min){
	    min=d[i];
	    min_locate=j;
	  }
      	}
      }
      flag[min_locate]=1;
       printf("%d, %d\n", min_locate, min);
      
      
      //	tour[k]=l;
      //	printf("tour[%d]=%d\n", l,tour[k]);
      
      
      
      
      //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;
  
  xd = X[a]-X[b];
  yd = Y[a]-Y[b];
  
  return (int)(sqrt(xd*xd+yd*yd) + 0.5);
}

出力結果
0, 100
0, 100
0, 100
0, 100
0, 100
0, 100
0, 100
0, 100
0, 100
0, 100
0, 100
.....

beatle
記事: 1281
登録日時: 12年前
住所: 埼玉
連絡を取る:

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#21

投稿記事 by beatle » 12年前

ファイブマンさんの質問がコロコロ変わるので、答えるのに非常に苦労します。
特定の質問に固定して、その問題が解決したら次に行く、というやり方にしませんか?

ファイブマン

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#22

投稿記事 by ファイブマン » 12年前

確かにそうですね。
それではまず一個上のdistance の計算方法から解決したいと思います。
紛らわしいことしてすみません。

beatle
記事: 1281
登録日時: 12年前
住所: 埼玉
連絡を取る:

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#23

投稿記事 by beatle » 12年前

ファイブマンさんのC言語力向上のために、一つ問題を出しますから考えてみてください。
distanceの質問への間接的な回答でもありますので、考えて無駄なことはありません。

Q.下記のコードを実行したら、なんと出力されるか、頭で考えて答えて下さい。

コード:

#include<stdio.h>

int main()
{
    int i;
    for (i = 0; i < 3; ++i)
    {
        printf("%d\n", i);
        for (i = 0; i < 3; ++i)
        {
        }
    }
    return 0;
}

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

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#24

投稿記事 by non » 12年前

22行、25行がわからん。
また、距離をdの配列に入れる必要は、ないだろう。
私のサンプルでdが配列になっている意味を考えたらどうだろうか。
それより、いつになったら、インデントしてくれるのだろう。
non

ファイブマン

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#25

投稿記事 by ファイブマン » 12年前

beatle さんが書きました:ファイブマンさんのC言語力向上のために、一つ問題を出しますから考えてみてください。
distanceの質問への間接的な回答でもありますので、考えて無駄なことはありません。

Q.下記のコードを実行したら、なんと出力されるか、頭で考えて答えて下さい。

コード:

#include<stdio.h>

int main()
{
    int i;
    for (i = 0; i < 3; ++i)
    {
        printf("%d\n", i);
        for (i = 0; i < 3; ++i)
        {
        }
    }
    return 0;
}
0
1
2
ですか?
2個目のforの意味がわかりません。


ここにソースをそのまま貼るとインデントしてもずれるんですか?

beatle
記事: 1281
登録日時: 12年前
住所: 埼玉
連絡を取る:

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#26

投稿記事 by beatle » 12年前

ファイブマン さんが書きました: 0
1
2
ですか?
なるほど。パッと見はそうなりそうですね。答えは言いませんから、ご自分で実行して確かめてみてくださいね。
ファイブマン さんが書きました:2個目のforの意味がわかりません。
実際に実行してみたら分かるかもしれません。
ファイブマン さんが書きました:ここにソースをそのまま貼るとインデントしてもずれるんですか?
「タブ」と「スペース」が混在していると、崩れてしまうかもしれません。どちらかに統一しましょう。

アバター
bitter_fox
記事: 607
登録日時: 13年前
住所: 大阪府

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#27

投稿記事 by bitter_fox » 12年前

ファイブマン さんが書きました: ここにソースをそのまま貼るとインデントしてもずれるんですか?
ファイブマンさんの環境では1TAB6SPACE1TAB8SPACEなのだと思われます。
一方この掲示板(あるいは多くの環境)では1TAB4SPACEとして扱うのでタブとスペースが混在しているインデントだとタブの分だけずれてしまいます。

下の画像は1TAB6SPACE1TAB8SPACEの時と1TAB4SPACEの時のインデントのされ方です。
1.png
2.png
[*]の周辺で部分的にずれている点以外はしっかりとインデントされています。[/s]
printf("%d, %d\n", min_locate, min);のインデントがずれている点以外はしっかりとインデントされています。
今後はタブとスペースを混在させないようにすると混乱が起きないと思います。

[hr][修正]
1TAB6SPACEかと思ったけど1TAB8SPACEの方で適切にインデントされたので修正。

main上段と下段とで1インデント目が若干ずれてますね。

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

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#28

投稿記事 by non » 12年前

一応、インデントしていたのなら、申し訳なかったですね。プレビューして確認する癖をつけてください。

インデントはタブを使うことで統一することをお勧めします。
non

ファイブマン

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#29

投稿記事 by ファイブマン » 12年前

beatle さんが書きました:
ファイブマン さんが書きました: 0
1
2
ですか?
なるほど。パッと見はそうなりそうですね。答えは言いませんから、ご自分で実行して確かめてみてくださいね。
1個目のforでi=0,その中の2個目のでiが0~2までループしてしまったからそのかっこの外にあるprintfでは1,2は出力されなかったと言うことでしょうか.

beatle
記事: 1281
登録日時: 12年前
住所: 埼玉
連絡を取る:

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#30

投稿記事 by beatle » 12年前

そういうことです。
そしてファイブマンさんのNo20のソースコードも、まさに同じようなことをやっているのです。
(forの中に、もう一つ同じカウンタ変数を使ったforがある)

ファイブマン

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#31

投稿記事 by ファイブマン » 12年前

beatle さんが書きました:そういうことです。
そしてファイブマンさんのNo20のソースコードも、まさに同じようなことをやっているのです。
(forの中に、もう一つ同じカウンタ変数を使ったforがある)
言われて気づきました.
jがかぶっていました.


結果,d自体は出せたのですが, iのforループの中を以下のようにしてdを計算してi,dを出力し,iが0~1399,jが0~1399すべての計算結果をだしました.
今,その後その中のdで一番小さな値を出力するようにしたいのですがここからどのようにすればそれが出せるのでしょうか.
以下,その部分を記載します.回答宜しくお願いします.

コード:

for(i=0;i<1400;i++) {
    min=100;
    for(j=0;j<1400;j++) {
      if(i!=j){
	d[i]=distance(i,j);
      }
      printf("%d, %d\n", i, d[i]);
      
      if(flag[j]==0){
	if(d[i]<min){
	  min=d[i];
	  min_locate=j;
	}
      }
      flag[min_locate]=1;
      }
  }
そしてその後はすでに通った都市にフラグをつけて同じ都市にはまわらないようにしたいと考えています.

beatle
記事: 1281
登録日時: 12年前
住所: 埼玉
連絡を取る:

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#32

投稿記事 by beatle » 12年前

本当にいろいろめちゃくちゃで突っ込むのが疲れるので、全部作りました。

コード:

#include <stdio.h>
#include <math.h>

#define MAX_CITIES 1400

struct Point
{
	double x;
	double y;
};

int ReadPositions(struct Point* positions, size_t n);
double Distance(const struct Point* positions, size_t a, size_t b);
void GetNearest(const struct Point* positions, size_t n, size_t current_city, size_t* next_city, const char* visited);

int main()
{
	size_t tour[MAX_CITIES] = {0};
	struct Point positions[MAX_CITIES];
	char visited[MAX_CITIES] = {0};
	size_t num_visited = 0;
	size_t current_city = 0; // initial city
	size_t next_city = 0;
	size_t num_cities = 0;
	size_t i;

	num_cities = ReadPositions(positions, MAX_CITIES);

	tour[num_visited++] = current_city;
	visited[current_city] = 1;

	while (num_visited < num_cities)
	{
		GetNearest(positions, num_cities, current_city, &next_city, visited);
		tour[num_visited++] = next_city;
		visited[next_city] = 1;
		current_city = next_city;
	}

	for (i = 0; i < num_cities; ++i)
	{
		printf("tour %u is city %u\n", i, tour[i] + 1);
	}
	return 0;
}

int ReadPositions(struct Point* positions, size_t n)
{
	size_t city = 0;
	double x = 0, y = 0;
	size_t i = 0;
	while (i < n && scanf("%u %lf %lf", &city, &x, &y) != EOF)
	{
		positions[city - 1].x = x;
		positions[city - 1].y = y;
		i++;
	}
	return i;
}

double Distance(const struct Point* positions, size_t a, size_t b)
{
	return sqrt(pow(positions[a].x, 2) + pow(positions[b].y, 2));
}

void GetNearest(const struct Point* positions, size_t n, size_t current_city, size_t* next_city, const char* visited)
{
	size_t i, min_city = current_city;
	double min = 0, d = 0;
	int found_min = 0;

	for (i = 0; i < n; ++i)
	{
		if (!visited[i])
		{
			d = Distance(positions, current_city, i);
			if (found_min == 0 || d < min)
			{
				found_min = 1;
				min = d;
				min_city = i;
			}
		}
	}

	*next_city = min_city;
}

beatle
記事: 1281
登録日時: 12年前
住所: 埼玉
連絡を取る:

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#33

投稿記事 by beatle » 12年前

ちなみにNo32のソースコードは、本当の巡回セールスマン問題の解ではありません。
今いる都市に一番近い都市へ行く、という至極単純な動作を繰り返すだけです。

ファイブマン

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#34

投稿記事 by ファイブマン » 12年前

ここまで詳しく教えていただきありがとうございます。
知り合いにもアドバイスを請うて以下のようにしてみました。
i=0からループをまわし、jを1から1400まで関数distanceを計算し、それがminより小さい場合はminにdistanceを代入し、その時のjをmin_ind(都市の番号)にjを入れます。
そしてflag[j]に1を代入します。(次にまた都市間の最短距離を出すときにその都市を除くようにするために)

そしてtour[k]に代入。(tour[0]から始まり、回った都市の順にtour[k]の配列にmin_indを入れる)。tour[0]はスタート地点なため、kは1から始めます。そして次はiにmin_indを入れ、(次のiを基準に既に通った都市以外との最短距離を求めていく)というようにしたいと考えています。

今は出力結果が
tour[1]=1
tour[2]=1
tour[3]=1
tour[4]=1
tour[5]=1
tour[6]=1
...
となってしまっています。
これはkが1以降更新されていないということですよね。
tour[k]=min_ind;
i=min_ind;
の書くところが違っている等でしょうか。
他にはどこが不足しているのでしょうか。
回答よろしくお願いします。

コード:


#include<stdio.h>
#include<math.h>
#include<stdlib.h>
double X[1400], Y[1400];

int main(){
  int i, j, k, tour[1400];
  char buf[256];
  FILE *fp;
  int min=100;
  int flag[1400]; 
  int min_ind;//都市番号
  k=0;
  while(fgets(buf, 256, stdin)!=NULL){
    sscanf(buf, "%d %lf %lf", &i, &X[k], &Y[k]);  //配列に座標を格納
    k++;
  }
  tour[0] = 0;
  //i=st;
  for(k=1;k<1400;k++){
    for(i=0;i<1400;i++){ 
      if(flag[j]!=1){
      for(j=1;j<1400;j++){
        if(min>distance(i,j)){
          min=distance(i,j);
          min_ind=j; 
          flag[j]=1;
      
        }
      }
      }
    }
    tour[k]=min_ind;
    i=min_ind; 
    printf("tour[%d]=%d\n", k,tour[k]); 
  } 
  return 0;
}

int distance(int a, int b)
{
  double xd, yd;
  
  xd = X[a]-X[b];
  yd = Y[a]-Y[b];
  
  return (int)(sqrt(xd*xd+yd*yd) + 0.5);
}

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

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#35

投稿記事 by non » 12年前

昔、回答となるサンプルを載せたつもりでしたが、何がそれではいけないのかさっぱりわかりません。
beetleさんも、サンプルを載せてますが、それについても気に入らない理由が書かれていません。
動かないプログラムを載せられても、試すこともできません。
出力結果が出ることさえも信じられません。いたるところに、初期化されてない変数がありますからね。

都市数が1400もあるから、説明するのが大変ですし、こちらも試すことができません。
都市数を5個にした場合、どのような結果が欲しいのか具体的に例をあげて、再度説明してください。
non

ファイブマン

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#36

投稿記事 by ファイブマン » 12年前

それも参考にしつつ、試みたのですがこっちの都合で、課題のやり方に沿ってやらなければいけなかったため、以前nonさんやbeatleさんのをだいぶ参照して書いたのを先生に見せたところここはこういう風にしておいてほしい(あとで修正がしやすいように、らしいです)とのことで、ここまで改変されてしまいました。
あそこまで教えていただいておいて本当に申し訳ないと思っています。


そして、都市数を5個にした場合ですが、
その中のある都市i(都市番号i=0)から残りの4つの都市との距離を計算し、その中で最短距離をもつ都市jに行くようにし、その時通った順に
tour[k]=j(初めはk=1)にし、その都市にフラグをつけておき、次の最短距離を計算するときに既にフラグflag[j]=1がついた都市は計算しないようにする。
そしてjを今度はiに代入し、iから最も近い都市をまた計算し、最短距離の都市jを次はtour[2]=jとし、フラグをつけ、ループさせ、
都市番号0から始めて、回った順が0→4→1→5→2→3とすると出力の結果として

tour[0]=0←(これは予めスタート地点を決めておいたもの)
tour[1]=4
tour[2]=1
tour[3]=5
tour[4]=2
tour[5]=3

と、いう仕様にしたいと考えています。
皆さん、いろいろ教えていただいているのにその気持ちを無下にしてしまい、すみませんでした。

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

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#37

投稿記事 by non » 12年前

これでいいですか。

コード:

#include <stdio.h>
#include <math.h>

#define CityNum 6
double X[CityNum]={6,3,9,10,4,2};
double Y[CityNum]={6,3,9,10,4,2};

int distance(int a, int b)
{
  double xd, yd;
  
  xd = X[a]-X[b];
  yd = Y[a]-Y[b];
  
  return (int)(sqrt(xd*xd+yd*yd) + 0.5);
} 

int main(void)
{
    int d;
    int flag[CityNum]={0};
	int tour[CityNum];
    int i,j,min,min_locate;
	int start;
	start=0;
	flag[start]=1;
	tour[0]=start;
    for(i=1;i<CityNum;i++){
        min=100;
        for(j=0;j<CityNum;j++){
            if(flag[j]==0 && start!=j){
				d=distance(start,j);
                if(d<min){
                    min=d;
                    min_locate=j;
                }
            }
        }
        flag[min_locate]=1;
		start=min_locate;
		tour[i]=start;
    }
	for(i=0;i<CityNum;i++)
		printf("tour[%d]=%d\n",i,tour[i]);
    return 0;
}
non

ファイブマン

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#38

投稿記事 by ファイブマン » 12年前

ここまでやっていただき,ありがとうございます.今度は課題に沿らせていただいて,非常に多い都市用にしてみたのですがどういうわけか,1288番目で回る都市から
出力結果が
tour[1285]=1398
tour[1286]=1071
tour[1287]=993
tour[1288]=1063
tour[1289]=1063
tour[1290]=1063
tour[1291]=1063
tour[1292]=1063
tour[1293]=1063
tour[1294]=1063
tour[1295]=1063
tour[1296]=1063



と同じ結果がずっと続くようになってしまいます.都市が5つでも1400でも変わらないと思うのですが理由がわかりません.
また,今回は通る都市の座標を別のファイルからリダイレクトするようにしました.一応そのテキストファイルも(長くなるので)次の書き込みで貼ってみるので見てはくれないでしょうか.

ほぼ答まで教えていただいてさらにここまで質問したら申し訳ないのですが,すみません,宜しくお願いします.

コード:

#include <stdio.h>
#include <math.h>
#define CityNum 1400

int distance(int a, int b)
{
  double xd, yd;
  double X[CityNum];
  double Y[CityNum];

  xd = X[a]-X[b];
  yd = Y[a]-Y[b];
  
  return (int)(sqrt(xd*xd+yd*yd) + 0.5);
} 

int main(void)
{
  double X[CityNum];
  double Y[CityNum];
  
  char buf[256];
  int flag[CityNum]={0};
  int tour[CityNum];
  int i,j,k,min,min_locate;
  int start;
  k=0;
  while(fgets(buf, 256, stdin)!=NULL){
    sscanf(buf, "%d %lf %lf", &i, &X[k], &Y[k]);  //配列に座標を格納
    k++;
  }
  start=0;
  flag[start]=1;
  tour[0]=start;
  for(i=1;i<CityNum;i++){
    min=1000;
    for(j=0;j<CityNum;j++){
      if(flag[j]==0 && j!=start){
	if(distance(start,j)<min){
	  min=distance(start,j);
	  min_locate=j;
	}
      }
    }
    flag[min_locate]=1;
    start=min_locate;
    tour[i]=start;
    
  }
  for(i=0;i<CityNum;i++)
    //printf("%lf,%lf\n", X[i], Y[i]);    
    printf("tour[%d]=%d\n",i,tour[i]);
  return 0;
}
/code]

ファイブマン

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#39

投稿記事 by ファイブマン » 12年前

これが入力するテキストファイルの内容です.
長くなってすみません,宜しくお願いします.

コード:

1 2.10461e+03 1.96835e+03
2 2.10461e+03 2.32264e+02
3 2.95591e+02 1.96835e+03
4 2.95591e+02 2.32264e+02
5 1.02570e+03 1.97130e+03
6 1.16167e+03 1.96539e+03
7 1.19123e+03 1.95949e+03
8 1.16759e+03 1.95949e+03
9 1.09664e+03 1.95949e+03
10 1.10256e+03 1.95358e+03
11 1.09073e+03 1.95358e+03
12 1.01979e+03 1.95358e+03
13 1.23262e+03 1.94177e+03
14 1.04344e+03 1.94177e+03
15 1.23853e+03 1.93587e+03
16 1.16759e+03 1.93587e+03
17 1.13211e+03 1.93587e+03
18 1.26809e+03 1.92996e+03
19 1.24444e+03 1.92996e+03
20 1.06708e+03 1.92996e+03
21 1.17941e+03 1.92406e+03
22 1.04935e+03 1.92406e+03
23 1.03753e+03 1.92406e+03
24 1.12620e+03 1.91815e+03
25 1.09073e+03 1.91815e+03
26 9.84319e+02 1.91815e+03
27 1.32720e+03 1.90634e+03
28 1.03161e+03 1.90634e+03
29 9.96143e+02 1.90634e+03
30 1.04935e+03 1.90044e+03
31 1.18532e+03 1.89453e+03
32 1.11438e+03 1.89453e+03
33 1.31538e+03 1.88272e+03
34 1.29173e+03 1.88272e+03
35 1.07891e+03 1.88272e+03
36 1.01388e+03 1.87682e+03
37 1.73512e+03 1.74691e+03
38 7.41934e+02 1.74691e+03
39 1.72921e+03 1.74100e+03
40 7.36022e+02 1.74100e+03
41 1.52230e+03 1.72329e+03
42 5.29108e+02 1.72329e+03
43 1.18532e+03 1.64652e+03
44 1.56959e+03 1.52252e+03
45 5.76403e+02 1.52252e+03
46 1.14985e+03 1.44575e+03
47 6.17786e+02 1.44575e+03
48 1.03161e+03 1.42213e+03
49 1.10847e+03 1.41622e+03
50 7.53758e+02 1.41622e+03
51 1.03161e+03 1.41032e+03
52 5.94138e+02 1.41032e+03
53 7.59670e+02 1.39851e+03
54 6.05962e+02 1.39851e+03
55 7.53758e+02 1.27450e+03
56 6.59169e+02 1.25088e+03
57 1.26809e+03 1.24498e+03
58 5.94138e+02 1.24498e+03
59 6.11874e+02 1.22726e+03
60 1.27991e+03 1.22136e+03
61 6.59169e+02 1.15640e+03
62 1.22670e+03 1.00287e+03
63 1.14985e+03 9.96967e+02
64 1.61097e+03 9.73347e+02
65 1.03753e+03 8.02101e+02
66 1.31538e+03 7.96196e+02
67 1.11438e+03 7.96196e+02
68 1.09073e+03 7.96196e+02
69 1.27400e+03 7.90290e+02
70 1.13211e+03 7.90290e+02
71 1.10847e+03 7.90290e+02
72 1.01388e+03 7.90290e+02
73 1.26809e+03 7.84386e+02
74 1.11438e+03 7.84386e+02
75 1.03161e+03 7.84386e+02
76 1.66418e+03 7.78481e+02
77 1.23853e+03 7.78481e+02
78 1.09664e+03 7.78481e+02
79 1.04935e+03 7.78481e+02
80 9.78407e+02 7.78481e+02
81 1.23262e+03 7.72576e+02
82 1.18532e+03 7.72576e+02
83 1.07891e+03 7.72576e+02
84 1.05526e+03 7.72576e+02
85 1.01979e+03 7.72576e+02
86 1.21488e+03 7.66670e+02
87 1.19123e+03 7.66670e+02
88 1.16759e+03 7.66670e+02
89 1.08482e+03 7.66670e+02
90 1.07300e+03 7.66670e+02
91 1.23262e+03 7.60765e+02
92 1.16167e+03 7.60765e+02
93 1.26218e+03 7.54861e+02
94 1.25035e+03 7.54861e+02
95 1.17941e+03 7.54861e+02
96 1.02570e+03 7.54861e+02
97 1.26809e+03 7.48955e+02
98 1.24444e+03 7.48955e+02
99 1.17350e+03 7.48955e+02
100 1.13211e+03 7.43050e+02
101 1.12029e+03 7.43050e+02
102 1.01979e+03 7.25335e+02
103 9.96143e+02 7.25335e+02
104 1.03753e+03 7.19430e+02
105 1.00205e+03 7.19430e+02
106 1.17350e+03 5.59994e+02
107 1.61097e+03 5.48184e+02
108 1.17350e+03 5.48184e+02
109 1.22079e+03 5.36374e+02
110 1.07300e+03 1.96539e+03
111 1.04935e+03 1.96539e+03
112 1.13803e+03 1.95949e+03
113 1.11438e+03 1.95949e+03
114 1.05526e+03 1.95949e+03
115 1.73512e+03 1.95358e+03
116 1.27400e+03 1.95358e+03
117 1.25035e+03 1.95358e+03
118 7.41934e+02 1.95358e+03
119 1.06117e+03 1.94177e+03
120 1.29173e+03 1.93587e+03
121 1.21488e+03 1.92996e+03
122 1.12029e+03 1.92996e+03
123 1.09073e+03 1.92406e+03
124 1.20306e+03 1.91815e+03
125 1.20897e+03 1.91225e+03
126 1.11438e+03 1.91225e+03
127 1.22670e+03 1.90634e+03
128 1.14394e+03 1.90634e+03
129 1.29173e+03 1.90044e+03
130 1.26809e+03 1.90044e+03
131 1.30947e+03 1.89453e+03
132 1.00205e+03 1.89453e+03
133 9.78407e+02 1.88272e+03
134 1.09073e+03 1.87682e+03
135 1.56959e+03 1.87091e+03
136 1.52230e+03 1.87091e+03
137 1.15576e+03 1.87091e+03
138 5.76403e+02 1.87091e+03
139 5.29108e+02 1.87091e+03
140 1.18532e+03 1.86501e+03
141 1.09073e+03 1.86501e+03
142 1.72921e+03 1.74691e+03
143 7.36022e+02 1.74691e+03
144 2.05436e+03 1.51661e+03
145 1.16759e+03 1.51661e+03
146 1.18532e+03 1.48708e+03
147 3.10371e+02 1.48708e+03
148 1.18532e+03 1.47528e+03
149 6.11874e+02 1.42213e+03
150 6.17786e+02 1.41622e+03
151 5.40932e+02 1.41032e+03
152 6.05962e+02 1.39260e+03
153 5.82315e+02 1.39260e+03
154 1.14985e+03 1.27450e+03
155 7.59670e+02 1.27450e+03
156 5.82315e+02 1.27450e+03
157 1.03161e+03 1.22726e+03
158 5.40932e+02 1.22136e+03
159 1.26809e+03 1.15640e+03
160 2.05436e+03 1.15050e+03
161 1.16759e+03 1.15050e+03
162 1.27991e+03 1.14459e+03
163 1.18532e+03 1.05011e+03
164 1.17350e+03 1.00287e+03
165 1.66418e+03 9.96967e+02
166 1.17941e+03 9.96967e+02
167 1.32720e+03 8.02101e+02
168 1.23262e+03 8.02101e+02
169 1.09073e+03 8.02101e+02
170 9.84319e+02 8.02101e+02
171 1.17941e+03 7.96196e+02
172 1.16759e+03 7.96196e+02
173 1.08482e+03 7.96196e+02
174 1.06117e+03 7.96196e+02
175 1.23262e+03 7.90290e+02
176 1.26218e+03 7.84386e+02
177 1.15576e+03 7.84386e+02
178 1.13211e+03 7.84386e+02
179 1.04935e+03 7.84386e+02
180 1.22079e+03 7.78481e+02
181 1.13803e+03 7.78481e+02
182 1.01979e+03 7.78481e+02
183 1.20306e+03 7.72576e+02
184 1.14985e+03 7.66670e+02
185 1.11438e+03 7.66670e+02
186 1.30947e+03 7.60765e+02
187 1.14394e+03 7.60765e+02
188 1.04935e+03 7.60765e+02
189 1.20897e+03 7.54861e+02
190 1.18532e+03 7.54861e+02
191 1.12620e+03 7.54861e+02
192 1.10256e+03 7.54861e+02
193 1.09073e+03 7.54861e+02
194 1.06708e+03 7.54861e+02
195 1.03753e+03 7.48955e+02
196 1.04344e+03 7.43050e+02
197 1.03161e+03 7.43050e+02
198 1.29173e+03 7.31240e+02
199 1.23262e+03 7.31240e+02
200 3.10371e+02 6.01329e+02
201 1.22966e+03 1.94473e+03
202 1.09960e+03 1.93292e+03
203 1.20601e+03 1.92111e+03
204 9.81363e+02 1.92111e+03
205 1.14690e+03 1.90930e+03
206 1.02866e+03 1.90930e+03
207 1.07595e+03 1.88568e+03
208 9.81363e+02 1.88568e+03
209 2.05732e+03 1.51956e+03
210 9.81363e+02 7.99148e+02
211 9.81363e+02 7.75528e+02
212 3.07415e+02 5.98377e+02
213 1.16463e+03 1.96835e+03
214 1.07004e+03 1.96835e+03
215 1.05231e+03 1.96244e+03
216 1.73217e+03 1.95654e+03
217 1.27104e+03 1.95654e+03
218 1.24740e+03 1.95654e+03
219 1.02275e+03 1.95654e+03
220 7.38978e+02 1.95654e+03
221 1.04639e+03 1.94473e+03
222 1.24740e+03 1.93292e+03
223 1.16463e+03 1.93292e+03
224 1.11733e+03 1.93292e+03
225 1.07004e+03 1.93292e+03
226 1.09960e+03 1.92701e+03
227 1.09369e+03 1.92111e+03
228 1.04639e+03 1.92111e+03
229 1.22375e+03 1.90930e+03
230 1.11733e+03 1.90930e+03
231 9.99099e+02 1.90930e+03
232 1.29469e+03 1.89748e+03
233 1.27104e+03 1.89748e+03
234 1.18828e+03 1.89748e+03
235 9.99099e+02 1.89748e+03
236 1.29469e+03 1.88568e+03
237 1.56664e+03 1.87386e+03
238 1.51934e+03 1.87386e+03
239 1.09369e+03 1.87386e+03
240 5.73447e+02 1.87386e+03
241 5.26152e+02 1.87386e+03
242 1.72625e+03 1.74986e+03
243 7.33066e+02 1.74986e+03
244 1.18828e+03 1.64947e+03
245 1.16463e+03 1.51956e+03
246 3.07415e+02 1.49004e+03
247 6.08918e+02 1.42508e+03
248 1.02866e+03 1.41918e+03
249 6.20742e+02 1.41327e+03
250 5.97094e+02 1.41327e+03
251 5.37976e+02 1.41327e+03
252 6.08918e+02 1.38965e+03
253 1.15281e+03 1.27155e+03
254 7.62626e+02 1.27155e+03
255 7.50802e+02 1.27155e+03
256 1.27104e+03 1.24793e+03
257 1.28287e+03 1.22431e+03
258 1.03457e+03 1.22431e+03
259 6.56213e+02 1.15345e+03
260 2.05732e+03 1.14755e+03
261 1.18828e+03 1.04716e+03
262 1.17054e+03 1.00583e+03
263 1.66122e+03 9.99920e+02
264 1.18237e+03 9.94014e+02
265 1.61393e+03 9.76300e+02
266 1.16463e+03 7.99148e+02
267 1.09369e+03 7.99148e+02
268 1.08186e+03 7.99148e+02
269 1.03457e+03 7.99148e+02
270 1.22966e+03 7.93243e+02
271 1.27104e+03 7.87338e+02
272 1.25922e+03 7.87338e+02
273 1.12916e+03 7.87338e+02
274 1.10551e+03 7.87338e+02
275 1.03457e+03 7.87338e+02
276 1.21784e+03 7.81433e+02
277 1.05231e+03 7.81433e+02
278 1.23557e+03 7.75528e+02
279 1.18828e+03 7.75528e+02
280 1.09369e+03 7.75528e+02
281 1.02275e+03 7.75528e+02
282 1.20601e+03 7.69623e+02
283 1.07595e+03 7.69623e+02
284 1.05231e+03 7.69623e+02
285 1.23557e+03 7.63718e+02
286 1.21193e+03 7.63718e+02
287 1.18828e+03 7.63718e+02
288 1.15281e+03 7.63718e+02
289 1.11733e+03 7.63718e+02
290 1.17645e+03 7.51908e+02
291 1.12916e+03 7.51908e+02
292 1.10551e+03 7.51908e+02
293 1.03457e+03 7.51908e+02
294 1.02275e+03 7.51908e+02
295 1.17645e+03 5.62947e+02
296 1.63167e+03 2.05102e+03
297 1.63167e+03 2.03921e+03
298 1.63167e+03 2.02740e+03
299 1.61984e+03 2.05102e+03
300 1.61984e+03 2.03921e+03
301 1.61984e+03 2.02740e+03
302 1.60802e+03 2.05102e+03
303 1.60802e+03 2.03921e+03
304 1.60802e+03 2.02740e+03
305 1.59619e+03 2.05102e+03
306 1.59619e+03 2.03921e+03
307 1.59619e+03 2.02740e+03
308 1.58437e+03 2.05102e+03
309 1.58437e+03 2.03921e+03
310 1.58437e+03 2.02740e+03
311 1.57255e+03 2.05102e+03
312 1.57255e+03 2.03921e+03
313 1.57255e+03 2.02740e+03
314 1.56072e+03 2.05102e+03
315 1.56072e+03 2.03921e+03
316 1.56072e+03 2.02740e+03
317 1.54890e+03 2.05102e+03
318 1.54890e+03 2.03921e+03
319 1.54890e+03 2.02740e+03
320 1.53708e+03 2.05102e+03
321 1.53708e+03 2.03921e+03
322 1.53708e+03 2.02740e+03
323 1.52525e+03 2.05102e+03
324 1.52525e+03 2.03921e+03
325 1.52525e+03 2.02740e+03
326 1.51343e+03 2.05102e+03
327 1.51343e+03 2.03921e+03
328 1.51343e+03 2.02740e+03
329 1.50160e+03 2.05102e+03
330 1.50160e+03 2.03921e+03
331 1.50160e+03 2.02740e+03
332 1.48978e+03 2.05102e+03
333 1.48978e+03 2.03921e+03
334 1.48978e+03 2.02740e+03
335 1.62575e+03 2.04511e+03
336 1.62575e+03 2.03330e+03
337 1.61393e+03 2.04511e+03
338 1.61393e+03 2.03330e+03
339 1.60211e+03 2.04511e+03
340 1.60211e+03 2.03330e+03
341 1.59028e+03 2.04511e+03
342 1.59028e+03 2.03330e+03
343 1.57846e+03 2.04511e+03
344 1.57846e+03 2.03330e+03
345 1.56664e+03 2.04511e+03
346 1.56664e+03 2.03330e+03
347 1.55481e+03 2.04511e+03
348 1.55481e+03 2.03330e+03
349 1.54299e+03 2.04511e+03
350 1.54299e+03 2.03330e+03
351 1.53116e+03 2.04511e+03
352 1.53116e+03 2.03330e+03
353 1.51934e+03 2.04511e+03
354 1.51934e+03 2.03330e+03
355 1.50752e+03 2.04511e+03
356 1.50752e+03 2.03330e+03
357 1.49569e+03 2.04511e+03
358 1.49569e+03 2.03330e+03
359 1.62575e+03 2.05102e+03
360 1.62575e+03 2.03921e+03
361 1.62575e+03 2.02740e+03
362 1.61393e+03 2.05102e+03
363 1.61393e+03 2.03921e+03
364 1.61393e+03 2.02740e+03
365 1.60211e+03 2.05102e+03
366 1.60211e+03 2.03921e+03
367 1.60211e+03 2.02740e+03
368 1.59028e+03 2.05102e+03
369 1.59028e+03 2.03921e+03
370 1.59028e+03 2.02740e+03
371 1.57846e+03 2.05102e+03
372 1.57846e+03 2.03921e+03
373 1.57846e+03 2.02740e+03
374 1.56664e+03 2.05102e+03
375 1.56664e+03 2.03921e+03
376 1.56664e+03 2.02740e+03
377 1.55481e+03 2.05102e+03
378 1.55481e+03 2.03921e+03
379 1.55481e+03 2.02740e+03
380 1.54299e+03 2.05102e+03
381 1.54299e+03 2.03921e+03
382 1.54299e+03 2.02740e+03
383 1.53116e+03 2.05102e+03
384 1.53116e+03 2.03921e+03
385 1.53116e+03 2.02740e+03
386 1.51934e+03 2.05102e+03
387 1.51934e+03 2.03921e+03
388 1.51934e+03 2.02740e+03
389 1.50752e+03 2.05102e+03
390 1.50752e+03 2.03921e+03
391 1.50752e+03 2.02740e+03
392 1.49569e+03 2.05102e+03
393 1.49569e+03 2.03921e+03
394 1.49569e+03 2.02740e+03
395 1.63167e+03 2.04511e+03
396 1.63167e+03 2.03330e+03
397 1.61984e+03 2.04511e+03
398 1.61984e+03 2.03330e+03
399 1.60802e+03 2.04511e+03
400 1.60802e+03 2.03330e+03
401 1.59619e+03 2.04511e+03
402 1.59619e+03 2.03330e+03
403 1.58437e+03 2.04511e+03
404 1.58437e+03 2.03330e+03
405 1.57255e+03 2.04511e+03
406 1.57255e+03 2.03330e+03
407 1.56072e+03 2.04511e+03
408 1.56072e+03 2.03330e+03
409 1.54890e+03 2.04511e+03
410 1.54890e+03 2.03330e+03
411 1.53708e+03 2.04511e+03
412 1.53708e+03 2.03330e+03
413 1.52525e+03 2.04511e+03
414 1.52525e+03 2.03330e+03
415 1.51343e+03 2.04511e+03
416 1.51343e+03 2.03330e+03
417 1.50160e+03 2.04511e+03
418 1.50160e+03 2.03330e+03
419 1.48978e+03 2.04511e+03
420 1.48978e+03 2.03330e+03
421 1.62871e+03 2.04806e+03
422 1.62871e+03 2.03625e+03
423 1.61689e+03 2.04806e+03
424 1.61689e+03 2.03625e+03
425 1.60506e+03 2.04806e+03
426 1.60506e+03 2.03625e+03
427 1.59324e+03 2.04806e+03
428 1.59324e+03 2.03625e+03
429 1.58141e+03 2.04806e+03
430 1.58141e+03 2.03625e+03
431 1.56959e+03 2.04806e+03
432 1.56959e+03 2.03625e+03
433 1.55777e+03 2.04806e+03
434 1.55777e+03 2.03625e+03
435 1.54594e+03 2.04806e+03
436 1.54594e+03 2.03625e+03
437 1.53412e+03 2.04806e+03
438 1.53412e+03 2.03625e+03
439 1.52230e+03 2.04806e+03
440 1.52230e+03 2.03625e+03
441 1.51047e+03 2.04806e+03
442 1.51047e+03 2.03625e+03
443 1.49865e+03 2.04806e+03
444 1.49865e+03 2.03625e+03
445 1.62280e+03 2.04216e+03
446 1.62280e+03 2.03035e+03
447 1.61097e+03 2.04216e+03
448 1.61097e+03 2.03035e+03
449 1.59915e+03 2.04216e+03
450 1.59915e+03 2.03035e+03
451 1.58733e+03 2.04216e+03
452 1.58733e+03 2.03035e+03
453 1.57550e+03 2.04216e+03
454 1.57550e+03 2.03035e+03
455 1.56368e+03 2.04216e+03
456 1.56368e+03 2.03035e+03
457 1.55185e+03 2.04216e+03
458 1.55185e+03 2.03035e+03
459 1.54003e+03 2.04216e+03
460 1.54003e+03 2.03035e+03
461 1.52821e+03 2.04216e+03
462 1.52821e+03 2.03035e+03
463 1.51638e+03 2.04216e+03
464 1.51638e+03 2.03035e+03
465 1.50456e+03 2.04216e+03
466 1.50456e+03 2.03035e+03
467 1.49274e+03 2.04216e+03
468 1.49274e+03 2.03035e+03
469 1.62871e+03 2.04216e+03
470 1.62871e+03 2.03035e+03
471 1.61689e+03 2.04216e+03
472 1.61689e+03 2.03035e+03
473 1.60506e+03 2.04216e+03
474 1.60506e+03 2.03035e+03
475 1.59324e+03 2.04216e+03
476 1.59324e+03 2.03035e+03
477 1.58141e+03 2.04216e+03
478 1.58141e+03 2.03035e+03
479 1.56959e+03 2.04216e+03
480 1.56959e+03 2.03035e+03
481 1.55777e+03 2.04216e+03
482 1.55777e+03 2.03035e+03
483 1.54594e+03 2.04216e+03
484 1.54594e+03 2.03035e+03
485 1.53412e+03 2.04216e+03
486 1.53412e+03 2.03035e+03
487 1.52230e+03 2.04216e+03
488 1.52230e+03 2.03035e+03
489 1.51047e+03 2.04216e+03
490 1.51047e+03 2.03035e+03
491 1.49865e+03 2.04216e+03
492 1.49865e+03 2.03035e+03
493 1.62280e+03 2.04806e+03
494 1.62280e+03 2.03625e+03
495 1.61097e+03 2.04806e+03
496 1.61097e+03 2.03625e+03
497 1.59915e+03 2.04806e+03
498 1.59915e+03 2.03625e+03
499 1.58733e+03 2.04806e+03
500 1.58733e+03 2.03625e+03
501 1.57550e+03 2.04806e+03
502 1.57550e+03 2.03625e+03
503 1.56368e+03 2.04806e+03
504 1.56368e+03 2.03625e+03
505 1.55185e+03 2.04806e+03
506 1.55185e+03 2.03625e+03
507 1.54003e+03 2.04806e+03
508 1.54003e+03 2.03625e+03
509 1.52821e+03 2.04806e+03
510 1.52821e+03 2.03625e+03
511 1.51638e+03 2.04806e+03
512 1.51638e+03 2.03625e+03
513 1.50456e+03 2.04806e+03
514 1.50456e+03 2.03625e+03
515 1.49274e+03 2.04806e+03
516 1.49274e+03 2.03625e+03
517 6.50302e+02 2.05102e+03
518 6.50302e+02 2.03921e+03
519 6.50302e+02 2.02740e+03
520 6.38478e+02 2.05102e+03
521 6.38478e+02 2.03921e+03
522 6.38478e+02 2.02740e+03
523 6.26655e+02 2.05102e+03
524 6.26655e+02 2.03921e+03
525 6.26655e+02 2.02740e+03
526 6.14831e+02 2.05102e+03
527 6.14831e+02 2.03921e+03
528 6.14831e+02 2.02740e+03
529 6.03007e+02 2.05102e+03
530 6.03007e+02 2.03921e+03
531 6.03007e+02 2.02740e+03
532 5.91184e+02 2.05102e+03
533 5.91184e+02 2.03921e+03
534 5.91184e+02 2.02740e+03
535 5.79360e+02 2.05102e+03
536 5.79360e+02 2.03921e+03
537 5.79360e+02 2.02740e+03
538 5.67537e+02 2.05102e+03
539 5.67537e+02 2.03921e+03
540 5.67537e+02 2.02740e+03
541 5.55713e+02 2.05102e+03
542 5.55713e+02 2.03921e+03
543 5.55713e+02 2.02740e+03
544 5.43889e+02 2.05102e+03
545 5.43889e+02 2.03921e+03
546 5.43889e+02 2.02740e+03
547 5.32066e+02 2.05102e+03
548 5.32066e+02 2.03921e+03
549 5.32066e+02 2.02740e+03
550 5.20242e+02 2.05102e+03
551 5.20242e+02 2.03921e+03
552 5.20242e+02 2.02740e+03
553 5.08418e+02 2.05102e+03
554 5.08418e+02 2.03921e+03
555 5.08418e+02 2.02740e+03
556 6.44390e+02 2.04511e+03
557 6.44390e+02 2.03330e+03
558 6.32566e+02 2.04511e+03
559 6.32566e+02 2.03330e+03
560 6.20743e+02 2.04511e+03
561 6.20743e+02 2.03330e+03
562 6.08919e+02 2.04511e+03
563 6.08919e+02 2.03330e+03
564 5.97096e+02 2.04511e+03
565 5.97096e+02 2.03330e+03
566 5.85272e+02 2.04511e+03
567 5.85272e+02 2.03330e+03
568 5.73448e+02 2.04511e+03
569 5.73448e+02 2.03330e+03
570 5.61625e+02 2.04511e+03
571 5.61625e+02 2.03330e+03
572 5.49801e+02 2.04511e+03
573 5.49801e+02 2.03330e+03
574 5.37977e+02 2.04511e+03
575 5.37977e+02 2.03330e+03
576 5.26153e+02 2.04511e+03
577 5.26153e+02 2.03330e+03
578 5.14330e+02 2.04511e+03
579 5.14330e+02 2.03330e+03
580 6.44390e+02 2.05102e+03
581 6.44390e+02 2.03921e+03
582 6.44390e+02 2.02740e+03
583 6.32566e+02 2.05102e+03
584 6.32566e+02 2.03921e+03
585 6.32566e+02 2.02740e+03
586 6.20743e+02 2.05102e+03
587 6.20743e+02 2.03921e+03
588 6.20743e+02 2.02740e+03
589 6.08919e+02 2.05102e+03
590 6.08919e+02 2.03921e+03
591 6.08919e+02 2.02740e+03
592 5.97096e+02 2.05102e+03
593 5.97096e+02 2.03921e+03
594 5.97096e+02 2.02740e+03
595 5.85272e+02 2.05102e+03
596 5.85272e+02 2.03921e+03
597 5.85272e+02 2.02740e+03
598 5.73448e+02 2.05102e+03
599 5.73448e+02 2.03921e+03
600 5.73448e+02 2.02740e+03
601 5.61625e+02 2.05102e+03
602 5.61625e+02 2.03921e+03
603 5.61625e+02 2.02740e+03
604 5.49801e+02 2.05102e+03
605 5.49801e+02 2.03921e+03
606 5.49801e+02 2.02740e+03
607 5.37977e+02 2.05102e+03
608 5.37977e+02 2.03921e+03
609 5.37977e+02 2.02740e+03
610 5.26153e+02 2.05102e+03
611 5.26153e+02 2.03921e+03
612 5.26153e+02 2.02740e+03
613 5.14330e+02 2.05102e+03
614 5.14330e+02 2.03921e+03
615 5.14330e+02 2.02740e+03
616 6.50302e+02 2.04511e+03
617 6.50302e+02 2.03330e+03
618 6.38478e+02 2.04511e+03
619 6.38478e+02 2.03330e+03
620 6.26655e+02 2.04511e+03
621 6.26655e+02 2.03330e+03
622 6.14831e+02 2.04511e+03
623 6.14831e+02 2.03330e+03
624 6.03007e+02 2.04511e+03
625 6.03007e+02 2.03330e+03
626 5.91184e+02 2.04511e+03
627 5.91184e+02 2.03330e+03
628 5.79360e+02 2.04511e+03
629 5.79360e+02 2.03330e+03
630 5.67537e+02 2.04511e+03
631 5.67537e+02 2.03330e+03
632 5.55713e+02 2.04511e+03
633 5.55713e+02 2.03330e+03
634 5.43889e+02 2.04511e+03
635 5.43889e+02 2.03330e+03
636 5.32066e+02 2.04511e+03
637 5.32066e+02 2.03330e+03
638 5.20242e+02 2.04511e+03
639 5.20242e+02 2.03330e+03
640 5.08418e+02 2.04511e+03
641 5.08418e+02 2.03330e+03
642 6.47346e+02 2.04806e+03
643 6.47346e+02 2.03625e+03
644 6.35522e+02 2.04806e+03
645 6.35522e+02 2.03625e+03
646 6.23699e+02 2.04806e+03
647 6.23699e+02 2.03625e+03
648 6.11875e+02 2.04806e+03
649 6.11875e+02 2.03625e+03
650 6.00051e+02 2.04806e+03
651 6.00051e+02 2.03625e+03
652 5.88228e+02 2.04806e+03
653 5.88228e+02 2.03625e+03
654 5.76404e+02 2.04806e+03
655 5.76404e+02 2.03625e+03
656 5.64581e+02 2.04806e+03
657 5.64581e+02 2.03625e+03
658 5.52757e+02 2.04806e+03
659 5.52757e+02 2.03625e+03
660 5.40933e+02 2.04806e+03
661 5.40933e+02 2.03625e+03
662 5.29109e+02 2.04806e+03
663 5.29109e+02 2.03625e+03
664 5.17286e+02 2.04806e+03
665 5.17286e+02 2.03625e+03
666 6.41434e+02 2.04216e+03
667 6.41434e+02 2.03035e+03
668 6.29611e+02 2.04216e+03
669 6.29611e+02 2.03035e+03
670 6.17787e+02 2.04216e+03
671 6.17787e+02 2.03035e+03
672 6.05963e+02 2.04216e+03
673 6.05963e+02 2.03035e+03
674 5.94140e+02 2.04216e+03
675 5.94140e+02 2.03035e+03
676 5.82316e+02 2.04216e+03
677 5.82316e+02 2.03035e+03
678 5.70492e+02 2.04216e+03
679 5.70492e+02 2.03035e+03
680 5.58669e+02 2.04216e+03
681 5.58669e+02 2.03035e+03
682 5.46845e+02 2.04216e+03
683 5.46845e+02 2.03035e+03
684 5.35022e+02 2.04216e+03
685 5.35022e+02 2.03035e+03
686 5.23198e+02 2.04216e+03
687 5.23198e+02 2.03035e+03
688 5.11374e+02 2.04216e+03
689 5.11374e+02 2.03035e+03
690 6.47346e+02 2.04216e+03
691 6.47346e+02 2.03035e+03
692 6.35522e+02 2.04216e+03
693 6.35522e+02 2.03035e+03
694 6.23699e+02 2.04216e+03
695 6.23699e+02 2.03035e+03
696 6.11875e+02 2.04216e+03
697 6.11875e+02 2.03035e+03
698 6.00051e+02 2.04216e+03
699 6.00051e+02 2.03035e+03
700 5.88228e+02 2.04216e+03
701 5.88228e+02 2.03035e+03
702 5.76404e+02 2.04216e+03
703 5.76404e+02 2.03035e+03
704 5.64581e+02 2.04216e+03
705 5.64581e+02 2.03035e+03
706 5.52757e+02 2.04216e+03
707 5.52757e+02 2.03035e+03
708 5.40933e+02 2.04216e+03
709 5.40933e+02 2.03035e+03
710 5.29109e+02 2.04216e+03
711 5.29109e+02 2.03035e+03
712 5.17286e+02 2.04216e+03
713 5.17286e+02 2.03035e+03
714 6.41434e+02 2.04806e+03
715 6.41434e+02 2.03625e+03
716 6.29611e+02 2.04806e+03
717 6.29611e+02 2.03625e+03
718 6.17787e+02 2.04806e+03
719 6.17787e+02 2.03625e+03
720 6.05963e+02 2.04806e+03
721 6.05963e+02 2.03625e+03
722 5.94140e+02 2.04806e+03
723 5.94140e+02 2.03625e+03
724 5.82316e+02 2.04806e+03
725 5.82316e+02 2.03625e+03
726 5.70492e+02 2.04806e+03
727 5.70492e+02 2.03625e+03
728 5.58669e+02 2.04806e+03
729 5.58669e+02 2.03625e+03
730 5.46845e+02 2.04806e+03
731 5.46845e+02 2.03625e+03
732 5.35022e+02 2.04806e+03
733 5.35022e+02 2.03625e+03
734 5.23198e+02 2.04806e+03
735 5.23198e+02 2.03625e+03
736 5.11374e+02 2.04806e+03
737 5.11374e+02 2.03625e+03
738 1.63167e+03 1.73215e+02
739 1.63167e+03 1.61405e+02
740 1.63167e+03 1.49595e+02
741 1.61984e+03 1.73215e+02
742 1.61984e+03 1.61405e+02
743 1.61984e+03 1.49595e+02
744 1.60802e+03 1.73215e+02
745 1.60802e+03 1.61405e+02
746 1.60802e+03 1.49595e+02
747 1.59619e+03 1.73215e+02
748 1.59619e+03 1.61405e+02
749 1.59619e+03 1.49595e+02
750 1.58437e+03 1.73215e+02
751 1.58437e+03 1.61405e+02
752 1.58437e+03 1.49595e+02
753 1.57255e+03 1.73215e+02
754 1.57255e+03 1.61405e+02
755 1.57255e+03 1.49595e+02
756 1.56072e+03 1.73215e+02
757 1.56072e+03 1.61405e+02
758 1.56072e+03 1.49595e+02
759 1.54890e+03 1.73215e+02
760 1.54890e+03 1.61405e+02
761 1.54890e+03 1.49595e+02
762 1.53708e+03 1.73215e+02
763 1.53708e+03 1.61405e+02
764 1.53708e+03 1.49595e+02
765 1.52525e+03 1.73215e+02
766 1.52525e+03 1.61405e+02
767 1.52525e+03 1.49595e+02
768 1.51343e+03 1.73215e+02
769 1.51343e+03 1.61405e+02
770 1.51343e+03 1.49595e+02
771 1.50160e+03 1.73215e+02
772 1.50160e+03 1.61405e+02
773 1.50160e+03 1.49595e+02
774 1.48978e+03 1.73215e+02
775 1.48978e+03 1.61405e+02
776 1.48978e+03 1.49595e+02
777 1.62575e+03 1.67310e+02
778 1.62575e+03 1.55500e+02
779 1.61393e+03 1.67310e+02
780 1.61393e+03 1.55500e+02
781 1.60211e+03 1.67310e+02
782 1.60211e+03 1.55500e+02
783 1.59028e+03 1.67310e+02
784 1.59028e+03 1.55500e+02
785 1.57846e+03 1.67310e+02
786 1.57846e+03 1.55500e+02
787 1.56664e+03 1.67310e+02
788 1.56664e+03 1.55500e+02
789 1.55481e+03 1.67310e+02
790 1.55481e+03 1.55500e+02
791 1.54299e+03 1.67310e+02
792 1.54299e+03 1.55500e+02
793 1.53116e+03 1.67310e+02
794 1.53116e+03 1.55500e+02
795 1.51934e+03 1.67310e+02
796 1.51934e+03 1.55500e+02
797 1.50752e+03 1.67310e+02
798 1.50752e+03 1.55500e+02
799 1.49569e+03 1.67310e+02
800 1.49569e+03 1.55500e+02
801 1.62575e+03 1.73215e+02
802 1.62575e+03 1.61405e+02
803 1.62575e+03 1.49595e+02
804 1.61393e+03 1.73215e+02
805 1.61393e+03 1.61405e+02
806 1.61393e+03 1.49595e+02
807 1.60211e+03 1.73215e+02
808 1.60211e+03 1.61405e+02
809 1.60211e+03 1.49595e+02
810 1.59028e+03 1.73215e+02
811 1.59028e+03 1.61405e+02
812 1.59028e+03 1.49595e+02
813 1.57846e+03 1.73215e+02
814 1.57846e+03 1.61405e+02
815 1.57846e+03 1.49595e+02
816 1.56664e+03 1.73215e+02
817 1.56664e+03 1.61405e+02
818 1.56664e+03 1.49595e+02
819 1.55481e+03 1.73215e+02
820 1.55481e+03 1.61405e+02
821 1.55481e+03 1.49595e+02
822 1.54299e+03 1.73215e+02
823 1.54299e+03 1.61405e+02
824 1.54299e+03 1.49595e+02
825 1.53116e+03 1.73215e+02
826 1.53116e+03 1.61405e+02
827 1.53116e+03 1.49595e+02
828 1.51934e+03 1.73215e+02
829 1.51934e+03 1.61405e+02
830 1.51934e+03 1.49595e+02
831 1.50752e+03 1.73215e+02
832 1.50752e+03 1.61405e+02
833 1.50752e+03 1.49595e+02
834 1.49569e+03 1.73215e+02
835 1.49569e+03 1.61405e+02
836 1.49569e+03 1.49595e+02
837 1.63167e+03 1.67310e+02
838 1.63167e+03 1.55500e+02
839 1.61984e+03 1.67310e+02
840 1.61984e+03 1.55500e+02
841 1.60802e+03 1.67310e+02
842 1.60802e+03 1.55500e+02
843 1.59619e+03 1.67310e+02
844 1.59619e+03 1.55500e+02
845 1.58437e+03 1.67310e+02
846 1.58437e+03 1.55500e+02
847 1.57255e+03 1.67310e+02
848 1.57255e+03 1.55500e+02
849 1.56072e+03 1.67310e+02
850 1.56072e+03 1.55500e+02
851 1.54890e+03 1.67310e+02
852 1.54890e+03 1.55500e+02
853 1.53708e+03 1.67310e+02
854 1.53708e+03 1.55500e+02
855 1.52525e+03 1.67310e+02
856 1.52525e+03 1.55500e+02
857 1.51343e+03 1.67310e+02
858 1.51343e+03 1.55500e+02
859 1.50160e+03 1.67310e+02
860 1.50160e+03 1.55500e+02
861 1.48978e+03 1.67310e+02
862 1.48978e+03 1.55500e+02
863 1.62871e+03 1.70262e+02
864 1.62871e+03 1.58452e+02
865 1.61689e+03 1.70262e+02
866 1.61689e+03 1.58452e+02
867 1.60506e+03 1.70262e+02
868 1.60506e+03 1.58452e+02
869 1.59324e+03 1.70262e+02
870 1.59324e+03 1.58452e+02
871 1.58141e+03 1.70262e+02
872 1.58141e+03 1.58452e+02
873 1.56959e+03 1.70262e+02
874 1.56959e+03 1.58452e+02
875 1.55777e+03 1.70262e+02
876 1.55777e+03 1.58452e+02
877 1.54594e+03 1.70262e+02
878 1.54594e+03 1.58452e+02
879 1.53412e+03 1.70262e+02
880 1.53412e+03 1.58452e+02
881 1.52230e+03 1.70262e+02
882 1.52230e+03 1.58452e+02
883 1.51047e+03 1.70262e+02
884 1.51047e+03 1.58452e+02
885 1.49865e+03 1.70262e+02
886 1.49865e+03 1.58452e+02
887 1.62280e+03 1.64357e+02
888 1.62280e+03 1.52547e+02
889 1.61097e+03 1.64357e+02
890 1.61097e+03 1.52547e+02
891 1.59915e+03 1.64357e+02
892 1.59915e+03 1.52547e+02
893 1.58733e+03 1.64357e+02
894 1.58733e+03 1.52547e+02
895 1.57550e+03 1.64357e+02
896 1.57550e+03 1.52547e+02
897 1.56368e+03 1.64357e+02
898 1.56368e+03 1.52547e+02
899 1.55185e+03 1.64357e+02
900 1.55185e+03 1.52547e+02
901 1.54003e+03 1.64357e+02
902 1.54003e+03 1.52547e+02
903 1.52821e+03 1.64357e+02
904 1.52821e+03 1.52547e+02
905 1.51638e+03 1.64357e+02
906 1.51638e+03 1.52547e+02
907 1.50456e+03 1.64357e+02
908 1.50456e+03 1.52547e+02
909 1.49274e+03 1.64357e+02
910 1.49274e+03 1.52547e+02
911 1.62871e+03 1.64357e+02
912 1.62871e+03 1.52547e+02
913 1.61689e+03 1.64357e+02
914 1.61689e+03 1.52547e+02
915 1.60506e+03 1.64357e+02
916 1.60506e+03 1.52547e+02
917 1.59324e+03 1.64357e+02
918 1.59324e+03 1.52547e+02
919 1.58141e+03 1.64357e+02
920 1.58141e+03 1.52547e+02
921 1.56959e+03 1.64357e+02
922 1.56959e+03 1.52547e+02
923 1.55777e+03 1.64357e+02
924 1.55777e+03 1.52547e+02
925 1.54594e+03 1.64357e+02
926 1.54594e+03 1.52547e+02
927 1.53412e+03 1.64357e+02
928 1.53412e+03 1.52547e+02
929 1.52230e+03 1.64357e+02
930 1.52230e+03 1.52547e+02
931 1.51047e+03 1.64357e+02
932 1.51047e+03 1.52547e+02
933 1.49865e+03 1.64357e+02
934 1.49865e+03 1.52547e+02
935 1.62280e+03 1.70262e+02
936 1.62280e+03 1.58452e+02
937 1.61097e+03 1.70262e+02
938 1.61097e+03 1.58452e+02
939 1.59915e+03 1.70262e+02
940 1.59915e+03 1.58452e+02
941 1.58733e+03 1.70262e+02
942 1.58733e+03 1.58452e+02
943 1.57550e+03 1.70262e+02
944 1.57550e+03 1.58452e+02
945 1.56368e+03 1.70262e+02
946 1.56368e+03 1.58452e+02
947 1.55185e+03 1.70262e+02
948 1.55185e+03 1.58452e+02
949 1.54003e+03 1.70262e+02
950 1.54003e+03 1.58452e+02
951 1.52821e+03 1.70262e+02
952 1.52821e+03 1.58452e+02
953 1.51638e+03 1.70262e+02
954 1.51638e+03 1.58452e+02
955 1.50456e+03 1.70262e+02
956 1.50456e+03 1.58452e+02
957 1.49274e+03 1.70262e+02
958 1.49274e+03 1.58452e+02
959 6.50302e+02 1.73215e+02
960 6.50302e+02 1.61405e+02
961 6.50302e+02 1.49595e+02
962 6.38478e+02 1.73215e+02
963 6.38478e+02 1.61405e+02
964 6.38478e+02 1.49595e+02
965 6.26655e+02 1.73215e+02
966 6.26655e+02 1.61405e+02
967 6.26655e+02 1.49595e+02
968 6.14831e+02 1.73215e+02
969 6.14831e+02 1.61405e+02
970 6.14831e+02 1.49595e+02
971 6.03007e+02 1.73215e+02
972 6.03007e+02 1.61405e+02
973 6.03007e+02 1.49595e+02
974 5.91184e+02 1.73215e+02
975 5.91184e+02 1.61405e+02
976 5.91184e+02 1.49595e+02
977 5.79360e+02 1.73215e+02
978 5.79360e+02 1.61405e+02
979 5.79360e+02 1.49595e+02
980 5.67537e+02 1.73215e+02
981 5.67537e+02 1.61405e+02
982 5.67537e+02 1.49595e+02
983 5.55713e+02 1.73215e+02
984 5.55713e+02 1.61405e+02
985 5.55713e+02 1.49595e+02
986 5.43889e+02 1.73215e+02
987 5.43889e+02 1.61405e+02
988 5.43889e+02 1.49595e+02
989 5.32066e+02 1.73215e+02
990 5.32066e+02 1.61405e+02
991 5.32066e+02 1.49595e+02
992 5.20242e+02 1.73215e+02
993 5.20242e+02 1.61405e+02
994 5.20242e+02 1.49595e+02
995 5.08418e+02 1.73215e+02
996 5.08418e+02 1.61405e+02
997 5.08418e+02 1.49595e+02
998 6.44390e+02 1.67310e+02
999 6.44390e+02 1.55500e+02
1000 6.32566e+02 1.67310e+02
1001 6.32566e+02 1.55500e+02
1002 6.20743e+02 1.67310e+02
1003 6.20743e+02 1.55500e+02
1004 6.08919e+02 1.67310e+02
1005 6.08919e+02 1.55500e+02
1006 5.97096e+02 1.67310e+02
1007 5.97096e+02 1.55500e+02
1008 5.85272e+02 1.67310e+02
1009 5.85272e+02 1.55500e+02
1010 5.73448e+02 1.67310e+02
1011 5.73448e+02 1.55500e+02
1012 5.61625e+02 1.67310e+02
1013 5.61625e+02 1.55500e+02
1014 5.49801e+02 1.67310e+02
1015 5.49801e+02 1.55500e+02
1016 5.37977e+02 1.67310e+02
1017 5.37977e+02 1.55500e+02
1018 5.26153e+02 1.67310e+02
1019 5.26153e+02 1.55500e+02
1020 5.14330e+02 1.67310e+02
1021 5.14330e+02 1.55500e+02
1022 6.44390e+02 1.73215e+02
1023 6.44390e+02 1.61405e+02
1024 6.44390e+02 1.49595e+02
1025 6.32566e+02 1.73215e+02
1026 6.32566e+02 1.61405e+02
1027 6.32566e+02 1.49595e+02
1028 6.20743e+02 1.73215e+02
1029 6.20743e+02 1.61405e+02
1030 6.20743e+02 1.49595e+02
1031 6.08919e+02 1.73215e+02
1032 6.08919e+02 1.61405e+02
1033 6.08919e+02 1.49595e+02
1034 5.97096e+02 1.73215e+02
1035 5.97096e+02 1.61405e+02
1036 5.97096e+02 1.49595e+02
1037 5.85272e+02 1.73215e+02
1038 5.85272e+02 1.61405e+02
1039 5.85272e+02 1.49595e+02
1040 5.73448e+02 1.73215e+02
1041 5.73448e+02 1.61405e+02
1042 5.73448e+02 1.49595e+02
1043 5.61625e+02 1.73215e+02
1044 5.61625e+02 1.61405e+02
1045 5.61625e+02 1.49595e+02
1046 5.49801e+02 1.73215e+02
1047 5.49801e+02 1.61405e+02
1048 5.49801e+02 1.49595e+02
1049 5.37977e+02 1.73215e+02
1050 5.37977e+02 1.61405e+02
1051 5.37977e+02 1.49595e+02
1052 5.26153e+02 1.73215e+02
1053 5.26153e+02 1.61405e+02
1054 5.26153e+02 1.49595e+02
1055 5.14330e+02 1.73215e+02
1056 5.14330e+02 1.61405e+02
1057 5.14330e+02 1.49595e+02
1058 6.50302e+02 1.67310e+02
1059 6.50302e+02 1.55500e+02
1060 6.38478e+02 1.67310e+02
1061 6.38478e+02 1.55500e+02
1062 6.26655e+02 1.67310e+02
1063 6.26655e+02 1.55500e+02
1064 6.14831e+02 1.67310e+02
1065 6.14831e+02 1.55500e+02
1066 6.03007e+02 1.67310e+02
1067 6.03007e+02 1.55500e+02
1068 5.91184e+02 1.67310e+02
1069 5.91184e+02 1.55500e+02
1070 5.79360e+02 1.67310e+02
1071 5.79360e+02 1.55500e+02
1072 5.67537e+02 1.67310e+02
1073 5.67537e+02 1.55500e+02
1074 5.55713e+02 1.67310e+02
1075 5.55713e+02 1.55500e+02
1076 5.43889e+02 1.67310e+02
1077 5.43889e+02 1.55500e+02
1078 5.32066e+02 1.67310e+02
1079 5.32066e+02 1.55500e+02
1080 5.20242e+02 1.67310e+02
1081 5.20242e+02 1.55500e+02
1082 5.08418e+02 1.67310e+02
1083 5.08418e+02 1.55500e+02
1084 6.47346e+02 1.70262e+02
1085 6.47346e+02 1.58452e+02
1086 6.35522e+02 1.70262e+02
1087 6.35522e+02 1.58452e+02
1088 6.23699e+02 1.70262e+02
1089 6.23699e+02 1.58452e+02
1090 6.11875e+02 1.70262e+02
1091 6.11875e+02 1.58452e+02
1092 6.00051e+02 1.70262e+02
1093 6.00051e+02 1.58452e+02
1094 5.88228e+02 1.70262e+02
1095 5.88228e+02 1.58452e+02
1096 5.76404e+02 1.70262e+02
1097 5.76404e+02 1.58452e+02
1098 5.64581e+02 1.70262e+02
1099 5.64581e+02 1.58452e+02
1100 5.52757e+02 1.70262e+02
1101 5.52757e+02 1.58452e+02
1102 5.40933e+02 1.70262e+02
1103 5.40933e+02 1.58452e+02
1104 5.29109e+02 1.70262e+02
1105 5.29109e+02 1.58452e+02
1106 5.17286e+02 1.70262e+02
1107 5.17286e+02 1.58452e+02
1108 6.41434e+02 1.64357e+02
1109 6.41434e+02 1.52547e+02
1110 6.29611e+02 1.64357e+02
1111 6.29611e+02 1.52547e+02
1112 6.17787e+02 1.64357e+02
1113 6.17787e+02 1.52547e+02
1114 6.05963e+02 1.64357e+02
1115 6.05963e+02 1.52547e+02
1116 5.94140e+02 1.64357e+02
1117 5.94140e+02 1.52547e+02
1118 5.82316e+02 1.64357e+02
1119 5.82316e+02 1.52547e+02
1120 5.70492e+02 1.64357e+02
1121 5.70492e+02 1.52547e+02
1122 5.58669e+02 1.64357e+02
1123 5.58669e+02 1.52547e+02
1124 5.46845e+02 1.64357e+02
1125 5.46845e+02 1.52547e+02
1126 5.35022e+02 1.64357e+02
1127 5.35022e+02 1.52547e+02
1128 5.23198e+02 1.64357e+02
1129 5.23198e+02 1.52547e+02
1130 5.11374e+02 1.64357e+02
1131 5.11374e+02 1.52547e+02
1132 6.47346e+02 1.64357e+02
1133 6.47346e+02 1.52547e+02
1134 6.35522e+02 1.64357e+02
1135 6.35522e+02 1.52547e+02
1136 6.23699e+02 1.64357e+02
1137 6.23699e+02 1.52547e+02
1138 6.11875e+02 1.64357e+02
1139 6.11875e+02 1.52547e+02
1140 6.00051e+02 1.64357e+02
1141 6.00051e+02 1.52547e+02
1142 5.88228e+02 1.64357e+02
1143 5.88228e+02 1.52547e+02
1144 5.76404e+02 1.64357e+02
1145 5.76404e+02 1.52547e+02
1146 5.64581e+02 1.64357e+02
1147 5.64581e+02 1.52547e+02
1148 5.52757e+02 1.64357e+02
1149 5.52757e+02 1.52547e+02
1150 5.40933e+02 1.64357e+02
1151 5.40933e+02 1.52547e+02
1152 5.29109e+02 1.64357e+02
1153 5.29109e+02 1.52547e+02
1154 5.17286e+02 1.64357e+02
1155 5.17286e+02 1.52547e+02
1156 6.41434e+02 1.70262e+02
1157 6.41434e+02 1.58452e+02
1158 6.29611e+02 1.70262e+02
1159 6.29611e+02 1.58452e+02
1160 6.17787e+02 1.70262e+02
1161 6.17787e+02 1.58452e+02
1162 6.05963e+02 1.70262e+02
1163 6.05963e+02 1.58452e+02
1164 5.94140e+02 1.70262e+02
1165 5.94140e+02 1.58452e+02
1166 5.82316e+02 1.70262e+02
1167 5.82316e+02 1.58452e+02
1168 5.70492e+02 1.70262e+02
1169 5.70492e+02 1.58452e+02
1170 5.58669e+02 1.70262e+02
1171 5.58669e+02 1.58452e+02
1172 5.46845e+02 1.70262e+02
1173 5.46845e+02 1.58452e+02
1174 5.35022e+02 1.70262e+02
1175 5.35022e+02 1.58452e+02
1176 5.23198e+02 1.70262e+02
1177 5.23198e+02 1.58452e+02
1178 5.11374e+02 1.70262e+02
1179 5.11374e+02 1.58452e+02
1180 1.88883e+03 2.04806e+03
1181 1.87701e+03 2.04806e+03
1182 1.85336e+03 2.04806e+03
1183 1.84154e+03 2.04806e+03
1184 1.82971e+03 2.04806e+03
1185 1.78242e+03 2.04806e+03
1186 1.74695e+03 2.04806e+03
1187 1.72330e+03 2.04806e+03
1188 1.71147e+03 2.04806e+03
1189 1.67600e+03 2.04806e+03
1190 1.65236e+03 2.04806e+03
1191 9.07466e+02 2.04806e+03
1192 8.95642e+02 2.04806e+03
1193 8.71994e+02 2.04806e+03
1194 8.60171e+02 2.04806e+03
1195 8.48347e+02 2.04806e+03
1196 8.01053e+02 2.04806e+03
1197 7.65581e+02 2.04806e+03
1198 7.41934e+02 2.04806e+03
1199 7.30111e+02 2.04806e+03
1200 6.94640e+02 2.04806e+03
1201 6.70992e+02 2.04806e+03
1202 1.87109e+03 2.04216e+03
1203 1.80015e+03 2.04216e+03
1204 1.77651e+03 2.04216e+03
1205 1.75286e+03 2.04216e+03
1206 8.89730e+02 2.04216e+03
1207 8.18788e+02 2.04216e+03
1208 7.95141e+02 2.04216e+03
1209 7.71494e+02 2.04216e+03
1210 1.87701e+03 2.03625e+03
1211 1.85336e+03 2.03625e+03
1212 1.84154e+03 2.03625e+03
1213 1.74695e+03 2.03625e+03
1214 1.72330e+03 2.03625e+03
1215 1.69965e+03 2.03625e+03
1216 8.95642e+02 2.03625e+03
1217 8.71994e+02 2.03625e+03
1218 8.60171e+02 2.03625e+03
1219 7.65581e+02 2.03625e+03
1220 7.41934e+02 2.03625e+03
1221 7.18287e+02 2.03625e+03
1222 1.89474e+03 2.03035e+03
1223 1.87109e+03 2.03035e+03
1224 1.85927e+03 2.03035e+03
1225 1.82380e+03 2.03035e+03
1226 1.81198e+03 2.03035e+03
1227 1.80015e+03 2.03035e+03
1228 1.77651e+03 2.03035e+03
1229 1.76468e+03 2.03035e+03
1230 1.75286e+03 2.03035e+03
1231 9.13377e+02 2.03035e+03
1232 8.89730e+02 2.03035e+03
1233 8.77906e+02 2.03035e+03
1234 8.42435e+02 2.03035e+03
1235 8.30612e+02 2.03035e+03
1236 8.18788e+02 2.03035e+03
1237 7.95141e+02 2.03035e+03
1238 7.83317e+02 2.03035e+03
1239 7.71494e+02 2.03035e+03
1240 1.88883e+03 1.70261e+02
1241 1.87701e+03 1.70261e+02
1242 1.85336e+03 1.70261e+02
1243 1.84154e+03 1.70261e+02
1244 1.82971e+03 1.70261e+02
1245 1.78242e+03 1.70261e+02
1246 1.74695e+03 1.70261e+02
1247 1.72330e+03 1.70261e+02
1248 1.71147e+03 1.70261e+02
1249 1.67600e+03 1.70261e+02
1250 1.65236e+03 1.70261e+02
1251 9.07466e+02 1.70261e+02
1252 8.95642e+02 1.70261e+02
1253 8.71994e+02 1.70261e+02
1254 8.60171e+02 1.70261e+02
1255 8.48347e+02 1.70261e+02
1256 8.01053e+02 1.70261e+02
1257 7.65581e+02 1.70261e+02
1258 7.41934e+02 1.70261e+02
1259 7.30111e+02 1.70261e+02
1260 6.94640e+02 1.70261e+02
1261 6.70992e+02 1.70261e+02
1262 1.87109e+03 1.64357e+02
1263 1.80015e+03 1.64357e+02
1264 1.77651e+03 1.64357e+02
1265 1.75286e+03 1.64357e+02
1266 8.89730e+02 1.64357e+02
1267 8.18788e+02 1.64357e+02
1268 7.95141e+02 1.64357e+02
1269 7.71494e+02 1.64357e+02
1270 1.87701e+03 1.58451e+02
1271 1.85336e+03 1.58451e+02
1272 1.84154e+03 1.58451e+02
1273 1.74695e+03 1.58451e+02
1274 1.72330e+03 1.58451e+02
1275 1.69965e+03 1.58451e+02
1276 8.95642e+02 1.58451e+02
1277 8.71994e+02 1.58451e+02
1278 8.60171e+02 1.58451e+02
1279 7.65581e+02 1.58451e+02
1280 7.41934e+02 1.58451e+02
1281 7.18287e+02 1.58451e+02
1282 1.89474e+03 1.52546e+02
1283 1.87109e+03 1.52546e+02
1284 1.85927e+03 1.52546e+02
1285 1.82380e+03 1.52546e+02
1286 1.81198e+03 1.52546e+02
1287 1.80015e+03 1.52546e+02
1288 1.77651e+03 1.52546e+02
1289 1.76468e+03 1.52546e+02
1290 1.75286e+03 1.52546e+02
1291 9.13377e+02 1.52546e+02
1292 8.89730e+02 1.52546e+02
1293 8.77906e+02 1.52546e+02
1294 8.42435e+02 1.52546e+02
1295 8.30612e+02 1.52546e+02
1296 8.18788e+02 1.52546e+02
1297 7.95141e+02 1.52546e+02
1298 7.83317e+02 1.52546e+02
1299 7.71494e+02 1.52546e+02
1300 1.89474e+03 2.04806e+03
1301 1.88292e+03 2.04806e+03
1302 1.85927e+03 2.04806e+03
1303 1.81198e+03 2.04806e+03
1304 1.76468e+03 2.04806e+03
1305 1.67009e+03 2.04806e+03
1306 9.13377e+02 2.04806e+03
1307 9.01554e+02 2.04806e+03
1308 8.77906e+02 2.04806e+03
1309 8.30612e+02 2.04806e+03
1310 7.83317e+02 2.04806e+03
1311 6.88728e+02 2.04806e+03
1312 1.88883e+03 2.04216e+03
1313 1.82971e+03 2.04216e+03
1314 1.73512e+03 2.04216e+03
1315 1.69965e+03 2.04216e+03
1316 1.67600e+03 2.04216e+03
1317 9.07466e+02 2.04216e+03
1318 8.48347e+02 2.04216e+03
1319 7.53758e+02 2.04216e+03
1320 7.18287e+02 2.04216e+03
1321 6.94640e+02 2.04216e+03
1322 1.88292e+03 2.03625e+03
1323 1.82380e+03 2.03625e+03
1324 1.67009e+03 2.03625e+03
1325 9.01554e+02 2.03625e+03
1326 8.42435e+02 2.03625e+03
1327 6.88728e+02 2.03625e+03
1328 1.78242e+03 2.03035e+03
1329 1.73512e+03 2.03035e+03
1330 1.71147e+03 2.03035e+03
1331 1.65236e+03 2.03035e+03
1332 8.01053e+02 2.03035e+03
1333 7.53758e+02 2.03035e+03
1334 7.30111e+02 2.03035e+03
1335 6.70992e+02 2.03035e+03
1336 1.89474e+03 1.70261e+02
1337 1.88292e+03 1.70261e+02
1338 1.85927e+03 1.70261e+02
1339 1.81198e+03 1.70261e+02
1340 1.76468e+03 1.70261e+02
1341 1.67009e+03 1.70261e+02
1342 9.13377e+02 1.70261e+02
1343 9.01554e+02 1.70261e+02
1344 8.77906e+02 1.70261e+02
1345 8.30612e+02 1.70261e+02
1346 7.83317e+02 1.70261e+02
1347 6.88728e+02 1.70261e+02
1348 1.88883e+03 1.64357e+02
1349 1.82971e+03 1.64357e+02
1350 1.73512e+03 1.64357e+02
1351 1.69965e+03 1.64357e+02
1352 1.67600e+03 1.64357e+02
1353 9.07466e+02 1.64357e+02
1354 8.48347e+02 1.64357e+02
1355 7.53758e+02 1.64357e+02
1356 7.18287e+02 1.64357e+02
1357 6.94640e+02 1.64357e+02
1358 1.88292e+03 1.58451e+02
1359 1.82380e+03 1.58451e+02
1360 1.67009e+03 1.58451e+02
1361 9.01554e+02 1.58451e+02
1362 8.42435e+02 1.58451e+02
1363 6.88728e+02 1.58451e+02
1364 1.78242e+03 1.52546e+02
1365 1.73512e+03 1.52546e+02
1366 1.71147e+03 1.52546e+02
1367 1.65236e+03 1.52546e+02
1368 8.01053e+02 1.52546e+02
1369 7.53758e+02 1.52546e+02
1370 7.30111e+02 1.52546e+02
1371 6.70992e+02 1.52546e+02
1372 1.89179e+03 2.05102e+03
1373 1.67896e+03 2.05102e+03
1374 9.10422e+02 2.05102e+03
1375 6.97596e+02 2.05102e+03
1376 1.73217e+03 2.04511e+03
1377 7.50802e+02 2.04511e+03
1378 1.89179e+03 2.03921e+03
1379 1.67896e+03 2.03921e+03
1380 9.10422e+02 2.03921e+03
1381 6.97596e+02 2.03921e+03
1382 1.83858e+03 2.03330e+03
1383 8.57215e+02 2.03330e+03
1384 1.78537e+03 2.02740e+03
1385 8.04009e+02 2.02740e+03
1386 1.89179e+03 1.73214e+02
1387 1.67896e+03 1.73214e+02
1388 9.10422e+02 1.73214e+02
1389 6.97596e+02 1.73214e+02
1390 1.73217e+03 1.67309e+02
1391 7.50802e+02 1.67309e+02
1392 1.89179e+03 1.61404e+02
1393 1.67896e+03 1.61404e+02
1394 9.10422e+02 1.61404e+02
1395 6.97596e+02 1.61404e+02
1396 1.83858e+03 1.55499e+02
1397 8.57215e+02 1.55499e+02
1398 1.78537e+03 1.49594e+02
1399 8.04009e+02 1.49594e+02
1400 0.00000e+00 0.00000e+00

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

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#40

投稿記事 by non » 12年前

グローバル変数とローカル変数の違いはわかりますか?

ついでに、距離の最大はいくらか、検証しておいてください。
non

ファイブマン

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#41

投稿記事 by ファイブマン » 12年前

ローカル変数はその関数の中のみで有効で、関数から出たら消失する変数ですよね。そしてグローバル変数はそのプログラム全体で共通の変数を使いたいときに使う変数と認識しています。

距離の最大はべつに再計算したところ,最大値=2147483647になりました.
しかしminをこれより大きくしたら
警告: this decimal constant is unsigned only in ISO C90
が出ました.
ここまで大きい数字になるとintじゃだめということでしょうか.
しかし初期値min=2147483647なら大丈夫で,警告はなくなるのですが,出力結果は
先ほどと変わらない結果となってしまいました.
他の人が言うのには型は変えたりはしてないようなのですが,どうしてこうなるかわかりません.どうしてなんでしょうか.
回答宜しくお願いします.

それと,以前に貼ったソースコードが書き違えてうまく貼れていなかったのでまたここで貼っておきたいと思います.

コード:

#include <stdio.h>
#include <math.h>
#define CityNum 1400

int distance(int a, int b)
{
  double xd, yd;
  double X[CityNum];
  double Y[CityNum];
  
  xd = X[a]-X[b];
  yd = Y[a]-Y[b];
  
  return (int)(sqrt(xd*xd+yd*yd) + 0.5);
} 

int main(void)
{
  double X[CityNum];
  double Y[CityNum];
  
  char buf[256];
  int flag[CityNum]={0};
  int tour[CityNum];
  int i,j,k,min,min_locate;
  int start;
  k=0;
  while(fgets(buf, 256, stdin)!=NULL){
    sscanf(buf, "%d %lf %lf", &i, &X[k], &Y[k]);  //配列に座標を格納
    k++;
  }
  start=0;
  flag[start]=1;
  tour[0]=start;
  for(i=1;i<CityNum;i++){
    min=2147483648;
    for(j=0;j<CityNum;j++){
      if(flag[j]==0 && j!=start){
	if(distance(start,j)<min){
	  min=distance(start,j);
	  min_locate=j;
	}
      }
    }
    flag[min_locate]=1;
    start=min_locate;
    tour[i]=start;
    
  }
  for(i=0;i<CityNum;i++)
    //printf("%lf,%lf\n", X[i], Y[i]);    
    printf("tour[%d]=%d\n",i,tour[i]);
  return 0;
}



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

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#42

投稿記事 by non » 12年前

ファイブマン さんが書きました:ローカル変数はその関数の中のみで有効で、関数から出たら消失する変数ですよね。そしてグローバル変数はそのプログラム全体で共通の変数を使いたいときに使う変数と認識しています。
disyatnceとmainにあるXやYは同じものですか?
ファイブマン さんが書きました: 距離の最大はべつに再計算したところ,最大値=2147483647になりました.
どういう計算をしたら(int)(sqrt(xd*xd+yd*yd) + 0.5がそんな数になるの?
また、あなたが使っているコンパイラのint型の範囲はいくらからいくらまで?
non

ファイブマン

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#43

投稿記事 by ファイブマン » 12年前

non さんが書きました:
disyatnceとmainにあるXやYは同じものですか?
はっ違います!ということはmainのsscanfで読み込んだテキストの値はdistance内では使われていないということですからdistance内でもまたsscanfを使わなければならないと言うことですか.
グローバル変数で
double X[CityNum],
double Y[CityNum]
を使うとするとどこでファイルの中身を読み込めば正しいX[],Y[]をmain,distanceで使うことができるのでしょうか.
non さんが書きました: あなたが使っているコンパイラのint型の範囲はいくらからいくらまで?
私の使っているコンパイラのint型は-2147483647~2147483647でした.
確かにこの数字はあり得ないと思ったのですが,別のプログラムで計算した結果,これもその変数の件のためこの値が出たと考えます.
となると,やはりX[],Y[]をグローバル変数にして,かつどうすればmain,distanceの両方でテキストの内容を読み込んで計算することができるかわかればいいということですか?

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

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#44

投稿記事 by non » 12年前

とりあえず、グローバルにしてください。
non

ファイブマン

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#45

投稿記事 by ファイブマン » 12年前

non さんが書きました:とりあえず、グローバルにしてください。
グローバル変数に変更しました。

コード:

#include <stdio.h>
#include <math.h>
#define CityNum 1400
double X[CityNum];
double Y[CityNum];
  
int distance(int a, int b)
{
  double xd, yd;
  
  xd = X[a]-X[b];
  yd = Y[a]-Y[b];
  
  return (int)(sqrt(xd*xd+yd*yd) + 0.5);
} 
 
int main(void)
{
  
  char buf[256];
  int flag[CityNum]={0};
  int tour[CityNum];
  int i,j,k,min,min_locate;
  int start;
  k=0;
  while(fgets(buf, 256, stdin)!=NULL){
    sscanf(buf, "%d %lf %lf", &i, &X[k], &Y[k]);  //配列に座標を格納
    k++;
  }
  start=0;
  flag[start]=1;
  tour[0]=start;
  for(i=1;i<CityNum;i++){
    min=2147483648;
    for(j=0;j<CityNum;j++){
      if(flag[j]==0 && j!=start){
    if(distance(start,j)<min){
      min=distance(start,j);
      min_locate=j;
    }
      }
    }
    flag[min_locate]=1;
    start=min_locate;
    tour[i]=start;
    
  }
  for(i=0;i<CityNum;i++)
    //printf("%lf,%lf\n", X[i], Y[i]);    
    printf("tour[%d]=%d\n",i,tour[i]);
  return 0;
}
これで実行すると
tour[0]=0
tour[1]=0
tour[2]=0
tour[3]=0
tour[4]=0
.
.
.
となってしまいます。
関数distanceの計算において[X],[Y]の中身が読み込めていないということでしょうか。

beatle
記事: 1281
登録日時: 12年前
住所: 埼玉
連絡を取る:

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#46

投稿記事 by beatle » 12年前

ファイブマン さんが書きました:関数distanceの計算において[X],[Y]の中身が読み込めていないということでしょうか。
この質問を書き込む前に、自分で調べる努力はしましたか?
例えばdistance関数内に

コード:

printf("X[%d] = %d, Y[%d] = %d\n", a, X[a], a, Y[a]);
などと書いておけば、X,Yに正しい値が入っているか、ご自分で調べられますよね。

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

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#47

投稿記事 by non » 12年前

min=2147483648;
にした理由を説明してください。
non

ファイブマン

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#48

投稿記事 by ファイブマン » 12年前

beatleさん,nonさん毎度回答していただいてありがとうございます.
結果から言うとうまく動くようになりました.
No.45のコードの48行目のforに{}をつけ忘れていたため出力がおかしかったようです.
non さんが書きました:min=2147483648;
にした理由を説明してください。
とりあえず初めはminに大きい値を入れておこうと考え,最大距離が(明らかにおかしいのですが)2147483647と出たのでそれより大きい値に設定しようと思いました.
しかし劇的に大きい値を設定するにはINT_MAXを使えばいいと気づいたためそれを使ってみました.距離の最大値=2147483647と出たのは最大値を求めるべつのプログラムでもファイルの中身を読めていなかったようです.
beatle さんが書きました:

コード:

printf("X[%d] = %d, Y[%d] = %d\n", a, X[a], a, Y[a]);
などと書いておけば、X,Yに正しい値が入っているか、ご自分で調べられますよね。
確かにそうですね.頭が回りませんでした.すみません.
上にも書いたように動いたは動いたのですがdistance内で

コード:

printf("X[%d] = %lf, Y[%d] = %lf\n", a, X[a], a, Y[a]);
を調べてみたのですが出力が
X[1304] = 1670.090000, Y[1304] = 2048.060000
X[1304] = 1670.090000, Y[1304] = 2048.060000
X[1304] = 1670.090000, Y[1304] = 2048.060000
X[1304] = 1670.090000, Y[1304] = 2048.060000
X[1304] = 1670.090000, Y[1304] = 2048.060000
X[1304] = 1670.090000, Y[1304] = 2048.060000
X[1304] = 1670.090000, Y[1304] = 2048.060000
X[1304] = 1670.090000, Y[1304] = 2048.060000
X[1304] = 1670.090000, Y[1304] = 2048.060000
X[1304] = 1670.090000, Y[1304] = 2048.060000
X[1323] = 1670.090000, Y[1323] = 2036.250000
X[1323] = 1670.090000, Y[1323] = 2036.250000
X[1323] = 1670.090000, Y[1323] = 2036.250000
X[1323] = 1670.090000, Y[1323] = 2036.250000


と,ランダム?に値が変わっていき,無限ループになってしまいました.
しかし全体のプログラム自体はうまくいっているように思えるのですがこれはなぜなのでしょうか.
これは考えてみてもわからなかったのでヒントだけ少しいただけないでしょうか.

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

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#49

投稿記事 by non » 12年前

printf("X[%d] = %lf, Y[%d] = %lf\n", a, X[a], a, Y[a]);
これで、どのような結果が出ることを予想してたわけですか?
無限ループっていうけど、本当に?

何が出て、何が正常なのかわからないならなんにもならない。
non

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

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#50

投稿記事 by non » 12年前

ファイブマン さんが書きました: No.45のコードの48行目のforに{}をつけ忘れていたため出力がおかしかったようです.
それは、違います。
non

ファイブマン

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#51

投稿記事 by ファイブマン » 12年前

non さんが書きました:printf("X[%d] = %lf, Y[%d] = %lf\n", a, X[a], a, Y[a]);
これで、どのような結果が出ることを予想してたわけですか?
無限ループっていうけど、本当に?

何が出て、何が正常なのかわからないならなんにもならない。
本当に本当に本当です.

初めのX[],Y[].
X[0],Y[0]=2104.610000 1968.350000
のみが出ると思っていました.

確かに理解していなければ意味はないですよね...

アバター
bitter_fox
記事: 607
登録日時: 13年前
住所: 大阪府

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#52

投稿記事 by bitter_fox » 12年前

ファイブマン さんが書きました:
non さんが書きました:printf("X[%d] = %lf, Y[%d] = %lf\n", a, X[a], a, Y[a]);
これで、どのような結果が出ることを予想してたわけですか?
無限ループっていうけど、本当に?

何が出て、何が正常なのかわからないならなんにもならない。
本当に本当に本当です.

初めのX[],Y[].
X[0],Y[0]=2104.610000 1968.350000
のみが出ると思っていました.
http://dixq.net/forum/viewtopic.php?f=3 ... =30#p78764
この時に最後まで出力されているのに、主要なロジックを変えずに出力を追加しただけで無限ループになるのは考えられないですね。
表示がものすごく時間を食っているせいで無限ループのように見えるだけだと思います。
しばらく放置したら終了してるはずです。

distance毎に出力されているのでdistanceが呼ばれた回数分表示されますね。

ファイブマン

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#53

投稿記事 by ファイブマン » 12年前

bitter_fox さんが書きました:
ファイブマン さんが書きました: 本当に本当に本当です.
distance毎に出力されているのでdistanceが呼ばれた回数分表示されますね。
本当に本当に嘘でした.
かなり待ったら終了しました.
distance毎に出力されているということですが,すると関数distance内にただ書いては正しい値は出ないでないということですよね.
他にもどこで値が違えてしまったのかmainのいろいろなところで適宜aを変えてprintf("X[%d] = %lf, Y[%d] = %lf\n", a, X[a], a, Y[a]);を試してみたのですが,X[]が呼び出されただけ出力されるということでそれだけ多くのものが出力されたのですが値自体は
違うと言うことはないように思えます.私の見落としなのでしょうか.
non さんが書きました:
ファイブマン さんが書きました: No.45のコードの48行目のforに{}をつけ忘れていたため出力がおかしかったようです.
それは、違います。
main関数含め,完成したプログラムを実行するとうまく動いているように見えるのですが,(入力ファイルの内容が多過ぎて本当に数値が合っているか確認するのはほぼ不可)何が違っているのかわかりません.

コード:

#include <stdio.h>
#include <math.h>
#include<limits.h>
#define CityNum 1400
double X[CityNum];
double Y[CityNum];
  
int distance(int a, int b){
  double xd, yd;
  xd = X[a]-X[b];
  yd = Y[a]-Y[b];
  
  return (int)(sqrt(xd*xd+yd*yd) + 0.5);
} 

int main(void)
{
  
  char buf[256];
  int flag[CityNum]={0};
  int tour[CityNum];
  int i,j,k,min,min_locate;
  int start;
  k=0;
  while(fgets(buf, 256, stdin)!=NULL){
    sscanf(buf, "%d %lf %lf", &i, &X[k], &Y[k]);  //配列に座標を格納
    k++;
  }
  start=0;
  flag[start]=1;
  tour[0]=start;
  for(i=1;i<CityNum;i++){
    min=INT_MAX;
    for(j=0;j<CityNum;j++){
      if(flag[j]==0 && j!=start){
	if(distance(start,j)<min){
	  min=distance(start,j);
	  min_locate=j;
	}
      }
    }
    flag[min_locate]=1;
    start=min_locate;
    tour[i]=start;
    
  }
  for(i=0;i<CityNum;i++){
    //printf("%lf,%lf\n", X[i], Y[i]);    
    printf("tour[%d]=%d\n",i,tour[i]);
  }
  return 0;
}


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

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#54

投稿記事 by non » 12年前

ファイブマン さんが書きました: distance毎に出力されているということですが,すると関数distance内にただ書いては正しい値は出ないでないということですよね.
今出ている値は正しい値です。
non

ファイブマン

Re: 巡回セールスマン問題の二都市間の距離を求める問題

#55

投稿記事 by ファイブマン » 12年前

ですよね.長期に渡って回答していただきありがとうございました.
最終結果のソースコードはNo.52に記載したコードです.
あとはこの内容をどこがどうしてこうなったというのをしっかり理解していきたいと思います.

閉鎖

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