#include #include #include #include #include typedef struct { double x; double y; } point; double sqr(double x) { return x*x; } double dist(double x[], double y[], int i, int j) { return sqrt(sqr(x[i]-x[j])+ sqr(y[i]-y[j])); } double DistSqrd(point cities[], int i, int j) { return (sqr(cities[i].x-cities[j].x)+ sqr(cities[i].y-cities[j].y)); } void swap(double *p, double *q) { double tmp=*p; *p = *q; *q = tmp; } void tsp(point cities[], double tourx[], double toury[], int ncities) { int i; double *ClosePt=tourx; double CloseDist; double *p; for (i=1; iCloseDist); ThisDist += sqr(toury[p-tourx]-ThisY); if (ThisDist <= CloseDist) { if (p < tourx+i) break; CloseDist = ThisDist; ClosePt = p; } } swap(&tourx[i],ClosePt); swap(&toury[i],&toury[ClosePt-tourx]); } } int main(int argc, char *argv[]) { int i, ncities; point *cities; double *tourx; double *toury; FILE *psfile; double sumdist = 0.0; if (argc!=2) { fprintf(stderr, "usage: %s ", argv[0]); exit(1); } ncities = atoi(argv[1]); cities = alloca(ncities*sizeof(point)); tourx=alloca(ncities*sizeof(double)); toury=alloca(ncities*sizeof(double)); for (i=0; i