#include #include #include #include #include // pour compiler gcc dessinGraphe.c -lgraphic -lXm -lXt -lX11 -lm // gcc -Wall -g dessinGraphe.c -o dessin -lgraphique -lXt -lX11 -lm typedef struct arete { int extr1, extr2; } Arete; typedef struct sommet { char nom[21]; int abs, ord; } Sommet; int ordre, taille; // ordre et taille du graphe Sommet * sommets; Arete * graphe; void saisirGraphe(char *); int num_sommet(char * mot); void dessinerGraphe(void); int main(int argc, char ** argv) { saisirGraphe(argv[1]); dessinerGraphe(); getchar(); Fin_Graphique(); return 0; } int num_sommet(char * mot) { int i = 0; while ((i < ordre) && (strcmp(mot, sommets[i].nom) != 0)) i++; return i; } void saisirGraphe(char * nom_fichier) { FILE * fichier; char nom_extr1[21], nom_extr2[21]; int i = 0; int s1, s2; fichier = fopen(nom_fichier,"r"); if (fichier == NULL) { printf("ce fichier n'existe pas\n"); exit(1); } fscanf(fichier,"%d%d", &ordre, &taille); sommets = (Sommet *) malloc(ordre * sizeof(Sommet)); graphe = (Arete *) malloc(taille * sizeof(Arete)); for (i = 0; i < ordre; i++) fscanf(fichier,"%s%d%d", sommets[i].nom, &sommets[i].abs, &sommets[i].ord); for (i = 0; i < taille; i++) { fscanf(fichier, "%s%s", nom_extr1, nom_extr2); s1 = num_sommet(nom_extr1); s2 = num_sommet(nom_extr2); if ((s1 == ordre) || (s2 == ordre)) { printf("une fausse arete ignorée"); i--; taille--; } else { graphe[i].extr1 = s1; graphe[i].extr2 = s2; } } fclose(fichier); } /* Affiche graphiquement les sommets du graphe et les arêtes d'un arbre couvrant de poids minimum. */ void dessinerGraphe(void) { int i; int minX= INT_MAX, maxX= INT_MIN, minY= INT_MAX, maxY= INT_MIN; for (i = 0; i < ordre; i++) { if (sommets[i].abs < minX) minX = sommets[i].abs; if (sommets[i].abs > maxX) maxX = sommets[i].abs; if (sommets[i].ord < minY) minY = sommets[i].ord; if (sommets[i].ord > maxY) maxY = sommets[i].ord; } Initialisation_Graphique(minX - 10, minY - 10, maxX + 150, maxY + 20); printf("ici\n"); for (i = 0; i < taille; i++) Trait(sommets[graphe[i].extr1].abs, sommets[graphe[i].extr1].ord, sommets[graphe[i].extr2].abs, sommets[graphe[i].extr2].ord, 0); for (i = 0; i < ordre; i++) { Disque(sommets[i].abs, sommets[i].ord, 5, 0); Deplace(sommets[i].abs + 10, sommets[i].ord - 15); Ecrit(sommets[i].nom, 0); } }