We are given 10 cities with latitudes x and longitudes y, and we have to figure out what order visited will give us the shortest distance traveled. We have to:

1. Create a function that returns an array of a random permutation 1-10 (this will help randomize which cities we visit in what order). I made this called randPerm. [THIS WORKS PERFECTLY].

2. Write a function that prints out the cities in the order specified by the permutation. I made this called printInGivenOrder. [THIS PRINTS OUT ALL 0's, DOESN'T WORK]

3. Write a function that generates random order of the cities and searches for the one with the smallest total distance. [ALSO DOESN'T WORK]

Here is what I have so far:

Code:#include <stdio.h> #include <stdlib.h> #include <math.h> struct City { float name; float x; float y; }; void randPerm(int N, int perm[]) { srand(time(NULL)); int i; for(i=0;i<N;i++)//initalize numbers { perm[i] = i; } for(i=0;i<N;i++) { int n=rand() % N; if(perm[n]<0) //not unique, try again --i; else { printf("%d\n", perm[n]); //got one perm[n]=-1; //mark that index taken, } //thus marking that number } } void printInGivenOrder(struct City cityArray[], int perm[]) { int i,num; printf("\nOrder of Cities:\n"); for(i=0;i<10;i++) { num=perm[i]; printf("%d\n", cityArray[num].name); } } float getTotalDistGivenPerm(int N, struct City cityArray[], int perm[]) { int i; int index1,index2; float distance,totaldist=0, a1,a2,b1,b2,x,y; for(i=1;i<N;i++) { index1 = perm[i]; index2 = perm[i-1]; a1=cityArray[index1].x; a2=cityArray[index1].y; b1=cityArray[index2].x; b2=cityArray[index2].y; x=69.1*(a1-b1); //this is just a formula i found online to y=53.0*(a2-b2); //calculate latitude and longitude and convert distance=sqrt(x*x + y*y); //to distance totaldist=totaldist+distance; } return totaldist; } int main() { struct City cityArray[10]; cityArray[0].name=1; //"Ann Arbor"; cityArray[0].x=42.28; cityArray[0].y=-83.75; cityArray[1].name=2;// "Austin"; cityArray[1].x=30.25; cityArray[1].y=-97.75; cityArray[2].name=3;// "Boston"; cityArray[2].x=42.36; cityArray[2].y=-71.06; cityArray[3].name=4;// "Chicago"; cityArray[3].x=41.88; cityArray[3].y=-87.63; cityArray[4].name=5;// "Detroit"; cityArray[4].x=42.33; cityArray[4].y=-83.05; cityArray[5].name=6;// "Lansing"; cityArray[5].x=42.73; cityArray[5].y=-84.55; cityArray[6].name=7;// "Las Vegas"; cityArray[6].x=36.18; cityArray[6].y=-115.14; cityArray[7].name=8;// "Los Angeles"; cityArray[7].x=34.05; cityArray[7].y=-118.25; cityArray[8].name=9;// "Miami"; cityArray[8].x=25.79; cityArray[8].y=-80.22; cityArray[9].name=10;// "Seattle"; cityArray[9].x=47.61; cityArray[9].y=-122.33; int number=10; int array[10]; randPerm(number, array); printInGivenOrder(cityArray, array); float finalDistancefromPerm= getTotalDistGivenPerm(number, cityArray, array); printf("\n %f", finalDistancefromPerm); return 0; }

My 3 biggest problems:

1. How do I enter the name of the city into the structure instead of just 1-10? If I chance int name to char name[50] in the structure and enter the name instead, it gives me an error.

2. Why doesn't my printInGivenOrder function print out the names (or numbers 1-10 right now until I figure out how to use the names of the cities) in the order of the permutation? All it prints out is all 0's

3. What am I doing wrong in my last function? It also only prints out 1 zero.

I know my code is kind of sloppy right now, sorry for the inconvenience, but any help would greatly be appreciated! Thanks!