#include "dessinTSP.h" #include #include #include coordonnees *villes = NULL; char * chercher_lire_ligne_commencant_par(char * mot, FILE *fichier) { enum{Taille_ligne = 1024}; char *ligne=malloc(Taille_ligne); int l = strlen(mot); while(fgets(ligne,Taille_ligne, fichier)) if(!strncmp(mot,ligne,l)) return ligne; free(ligne); return NULL; } int lire_ville(char *fichier) { #define DIM "DIMENSION:" FILE *f=fopen(fichier,"r"); if (f==NULL) { perror(fichier); exit(1); } char *l=chercher_lire_ligne_commencant_par(DIM,f); int nb_villes; sscanf(l,DIM " %d", &nb_villes); villes= malloc(sizeof(*villes)*nb_villes); free(l); l=chercher_lire_ligne_commencant_par("DISPLAY_DATA_SECTION",f); free(l); for(int i = 0; i < nb_villes; i++) { int num_ville; fscanf(f," %d %f %f \n",&num_ville,&villes[i].x,&villes[i].y); } fclose(f); return nb_villes; } int* lire_tour(char *fichier, int nb_villes) { FILE *f=fopen(fichier,"r"); if (f==NULL) { perror(fichier); exit(1); } char *l=chercher_lire_ligne_commencant_par("TOUR_SECTION",f); free(l); int *tour = malloc(sizeof(int)*nb_villes); for(int i = 0; i < nb_villes; i++) { fscanf(f," %d ",&tour[i]); tour[i]--; } fclose(f); return tour; } void usage(char *argv0) { fprintf(stderr,"%s fichier.tsp fichier.tour.opt sortie.ext [fontsize] \n",argv0); fprintf(stderr,"avec ext dans {svg, eps, pdf}\n"); exit(1); } int main (int argc, char *argv[]) { if(argc != 4 && argc != 5) usage(argv[0]); int nb = lire_ville(argv[1]); int *tour = lire_tour(argv[2],nb); float fontsize = argc > 4 ? atoi(argv[4]) : 0; tsp_dessiner(nb, villes, tour, argv[3], fontsize); return EXIT_SUCCESS; }