Esempio n. 1
0
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);
}
Esempio n. 2
0
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);
  }
}