eil51の最短経路を求めるプログラミングを作ってます。
自分が書いたプログラムの出発点は原点(0,0)なんですが、出発点を原点ではなく都市にしたいです。あと、次に訪れる都市をランダムではなくその都市から近い都市を訪問するようにしたいです。
初心者でなのでコードはわかりづらいと思いますがアドバイスをください
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#define N 51 //都市の数
void main()
{
int a; //乱数
int b=0; //カウント
int i;
int goukei; //総距離
int x,y; //座標
int dis; //距離
int v[N]; //訪問フラグ
int num; //都市の番号
int n[N]; //numを入れる配列
int e[N]; //xを入れる配列
int f[N]; //yを入れる配列
FILE *fp1;
int *p=&x,*q=&y;
fp1=fopen("eil51.txt","r");
if(fp1==NULL){
printf("ファイルをオープンできませんでした\n");
exit(1);
}
//ファイルから各配列に代入
for(i=0;i<N;i++){
fscanf(fp1,"%d",&num);
fscanf(fp1,"%d",&x);
fscanf(fp1,"%d",&y);
n[i] = num;
e[i] = x;
f[i] = y;
}
fclose(fp1);
//0を代入する(訪れてないことを示す)
for(i=0;i<N;i++){
v[i] = 0;
}
srand((unsigned)time(NULL));
x=0,y=0; //原点
//乱数を使って番号と距離を表示
while(b != N){
a=rand()%N;
if(v[a]==0){
v[a]=1; //訪れた都市にマーキング
dis = sqrt((e[a]-x)*(e[a]-x)+(f[a]-y)*(f[a]-y));
*p=e[a]; //座標をxに代入
*q=f[a]; //座標をyに代入
b += v[a]; //何回訪れたかカウント
printf("%d 距離%d %d\n",n[a],dis,b);
goukei += dis;
}
}
x=0,y=0;
dis = sqrt((e[a]-x)*(e[a]-x)+(f[a]-y)*(f[a]-y));
printf("0 距離 %d\n",dis);
printf("総距離 %d",goukei+dis);
}