1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
| #include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main ()
{
struct ville /*definition d'un type structure nommé ville*/
{
int identifiant;
double abscisse;
double ordonnee;
};
struct ville Ville[101]; /* variable de type structure ville*/
double ** distance_entre_ville; /*distance euclidiene entre les ville*/
int i, j;
int n = 101;
int k = 101;
/*ouverture du fichier de données pour lecture*/
FILE * fichier;
fichier = fopen("D:\\Codes \\TS2004t3\\n100mosA.tsp", "r");
if(fichier == NULL)
{
printf("Impossible d'ouvrir fichier .tsp \n");
exit (-1);
}
/*on commence à lire à la ligne 6: NODE_COORD_SECTION
*/
for(i=0;i<6;i++)
while(fgetc(fichier)!='\n');
for(i=0;i<k;i++)
if (fscanf(fichier, "%d %lf %lf", &(Ville[i].identifiant), &(Ville[i].abscisse), &(Ville[i].ordonnee)) !=3)
{
printf("Erreur dans le format d'une ligne : ligne %d.\n", i);
exit(-1);
}
/*Allocation dynamique du tableau distance*/
distance_entre_ville = (double ** ) malloc (k * sizeof (double));
for (i=0;i<k;i++)
{
distance_entre_ville[i]=(double *)malloc(n * sizeof(double));
}
/*calcul distance*/
for(i=0;i<k;i++)
{
for(j=0;j<i+1;j++)
{
if(i==j)
{
distance_entre_ville[i][j]= 0.0;
distance_entre_ville[i][j]= distance_entre_ville[j][i] = sqrt(pow((Ville[i].abscisse - Ville[j].abscisse),2.0)+pow((Ville[i].ordonnee - Ville[j].ordonnee),2.0));
}
}
/*recopie contenu de la matrice distance entre les villes dans le fichier file*/
FILE * file;
file = fopen("D:\\Codes\\TS2004t3\\Distance_entre_ville.txt", "w");
if(file == NULL)
{
printf("Impossible d'ouvrir fichier .txt \n");
exit (-1);
}
for (i=0; i<k; i++)
{
for (j=0; j<n; j++)
{
fprintf(file, "%101lf",distance_entre_ville[i][j]);
}
fprintf (file, "\n" );
}
/*affichage matrice distance*/
for(i=0;i<n;i++)
{
for(j=0;j<k;j++)
{
printf("Distance[%i][%i]= %lf \n",i, j, distance_entre_ville[i][j]);
}
}
for(i=0;i<k;i++)
free(distance_entre_ville[i]);
free(distance_entre_ville);
/*femeture fichiers*/
fclose(fichier);
getchar();
return 0;
} |