void parcoursEnLargeurCouleurs(tGraphe graphe, tNumeroSommet sommetDepart, tTabCouleurs tableauCouleurs) { tFileSommets fileSommets; // variable contenant les numéros des sommets défilés tNumeroSommet x; // variable contenant les voisins de x tNumeroSommet y; // variable contenant les noms des sommets affichés tNomSommet nomSommet; // indice de boucle int i; grapheRecupNomSommet(graphe,sommetDepart,nomSommet); fileSommets = fileSommetsAlloue(); // on colorie le sommet de départ en vert et tous les autres sommets en bleu for (i = 0 ; i < grapheNbSommets(graphe) ; i++) { tableauCouleurs[i] = BLEU; } for (i = 0 ; i < grapheNbSommets(graphe) ; i++) { if (i == sommetDepart) { tableauCouleurs[i] = VERT; // on affiche le graphe au départ (quand tous les sommets) sont bleus et le sommet de départ est vert graphe2visuCouleurs(graphe,"visuCouleurs",tableauCouleurs); } } // on enfile le sommet de départ fileSommetsEnfile(fileSommets,sommetDepart); while (!fileSommetsEstVide(fileSommets)) { // on défile le dernier sommet enfilé x = fileSommetsDefile(fileSommets); // on parcourt la liste des voisins de x for (i = 0 ; i < grapheNbVoisinsSommet(graphe,x) ; i++) { // on récupère le numéro du i-ème voisin de x y = grapheVoisinSommetNumero(graphe,x,i); // s'il est bleu, on le colorie en vert et on l'enfile if (tableauCouleurs[y] == BLEU) { tableauCouleurs[y] = VERT; // on affiche le graphe car il y a eu un changement de couleur graphe2visuCouleurs(graphe,"visuCouleurs",tableauCouleurs); fileSommetsEnfile(fileSommets,y); } } // on colorie x en rouge et on affiche le nom de sommet correspondant tableauCouleurs[x] = ROUGE; // on affiche le graphe car il y a eu un changement de couleur graphe2visuCouleurs(graphe,"visuCouleurs",tableauCouleurs); grapheRecupNomSommet(graphe,x,nomSommet); } printf("\n"); // on libère l'espace mémoire occupé par le graphe car on n'en a plus besoin grapheLibere(graphe); }
void parcoursLargeur(tGraphe graphe, tNomSommet nom, tTabCouleurs tabCouleurs) { tFileSommets file; tNumeroSommet s, x, y; char * fichier; int i, cpt; cpt=0; fichier=malloc(sizeof(char[20])); s = grapheChercheSommetParNom(graphe, nom); file = fileSommetsAlloue(); for(i = 0; i <= grapheNbSommets(graphe) - 1; i++) { if(i != s) tabCouleurs[i] = BLEU; } tabCouleurs[s] = VERT; graphe2visuCouleurs(graphe, "img/visu0.ps", tabCouleurs); fileSommetsEnfile(file, s); while(!fileSommetsEstVide(file)) { x = fileSommetsDefile(file); for(i = 0; i <= grapheNbVoisinsSommet(graphe, x) - 1; i++) { y = grapheVoisinSommetNumero(graphe, x, i); if(tabCouleurs[y] == BLEU) { tabCouleurs[y] = VERT; fileSommetsEnfile(file, y); } } tabCouleurs[x] = ROUGE; cpt++; sprintf(fichier, "img/visu%d.ps",cpt ); graphe2visuCouleurs(graphe, fichier, tabCouleurs); } }