void affiche_parcours_largeur(tGraphe graphe, tNumeroSommet num_sommet, int first) { tNumeroSommet current_voisin; tTabCouleurs tab_couleurs; int i, nb_sommets, voisins; char *argv[3]; argv[0] = "evince"; argv[1] = output; argv[2] = NULL; /* char *argv[3]; argv[0] = "evince"; argv[1] = output; argv[2] = NULL; */ /* DFS (graphe G, sommet s) { Marquer(s); POUR CHAQUE élément s_fils de Voisins(s) FAIRE SI NonMarqué(s_fils) ALORS DFS(G,s_fils); FIN-SI FIN-POUR } */ graphe2visu(graphe, output, tab_couleurs); switch(fork()){ case 0 : if (execvp(argv[0], argv) == -1) halt("Error evince"); exit(EXIT_SUCCESS); } if(first){ nb_sommets = grapheNbSommets(graphe); if(verbose) printf("Nb sommets : %d\n", nb_sommets); for(i = 0 ; i < nb_sommets; i++){ tab_couleurs[i] = BLEU; } } tab_couleurs[num_sommet] = ROUGE; if(verbose) printf("Sommet %d marqué ROUGE \n", num_sommet); voisins = grapheNbVoisinsSommet(graphe, num_sommet); if(verbose) printf("Nombre de voisins du sommet %d : %d\n", num_sommet, voisins); for(i = 0 ; i<voisins ; i++){ current_voisin = grapheVoisinSommetNumero(graphe, num_sommet, i); if(verbose) printf("Voisin courant : %d\n", current_voisin); sleep(2); if(tab_couleurs[current_voisin] == BLEU) affiche_parcours_largeur(graphe, current_voisin, 0); } }
int main(int argc, char *argv[]) { tGraphe graphe; if (argc<3) { halt("Usage : %s FichierGraphe %s Outfile\n", argv[0],argv[1]); } graphe = grapheAlloue(); grapheChargeFichier(graphe, argv[1]); graphe2visu(graphe,argv[2]); grapheLibere(graphe); exit(EXIT_SUCCESS); }
int main(int argc, char** argv) { if (argc<2) halt("Usage : %s FichierGraphe\n", argv[0]); /* creation du graph et allocation memoire */ tGraphe graphe = grapheAlloue(); /* creation du fichier grp (argv[1] ne doi pas contenir l'extention) */ char grpfile[80] = ""; strcat(grpfile,argv[1]); strcat(grpfile,".grp"); /* on charge dans le graphe le fichier passer en param */ grapheChargeFichier(graphe,grpfile); /* on appelle la methode ki creer le .ps apartir du .grp en passant par un .dot */ graphe2visu(graphe,argv[1]); /* on free le graphe */ grapheLibere(graphe); return 1; }
void affiche_parcours_largeur(tGraphe graphe, tNumeroSommet num_sommet) { tFileSommets file; tNomSommet nom_sommet; tNumeroSommet current_voisin; tTabCouleurs tab_couleurs; int i, nb_sommets, voisins; char *argv[3]; argv[0] = "evince"; argv[1] = output; argv[2] = NULL; switch(fork()) { case -1: perror("fork"); exit(EXIT_FAILURE); case 0 : execvp(argv[0], argv); halt("Error evince"); exit(EXIT_FAILURE); default: file = fileSommetsAlloue(); nb_sommets = grapheNbSommets(graphe); if(verbose) printf("Nb sommets : %d\n", nb_sommets); for(i = 0 ; i < nb_sommets; i++) { tab_couleurs[i] = BLEU; } fileSommetsEnfile(file, num_sommet); tab_couleurs[num_sommet] = VERT; grapheRecupNomSommet(graphe, num_sommet, nom_sommet); printf("Sommet %s empilé\n", nom_sommet); graphe2visu(graphe, output, tab_couleurs); sleep(2); while(!fileSommetsEstVide(file)) { voisins = grapheNbVoisinsSommet(graphe, num_sommet); if(verbose) printf("Nb voisins : %d\n", voisins); for(i = 0; i < voisins; i++) { current_voisin = grapheVoisinSommetNumero(graphe, num_sommet, i); if(tab_couleurs[current_voisin] == BLEU ) { fileSommetsEnfile(file, current_voisin); tab_couleurs[current_voisin] = VERT; grapheRecupNomSommet(graphe, current_voisin, nom_sommet); printf("Sommet %s empilé\n", nom_sommet); graphe2visu(graphe, output, tab_couleurs); sleep(2); } if(verbose) printf("voisin num %d\n", current_voisin); } tab_couleurs[num_sommet] = ROUGE; num_sommet = fileSommetsDefile(file); grapheRecupNomSommet(graphe, num_sommet, nom_sommet); if(verbose) printf("Sommet %s depilé\n", nom_sommet); graphe2visu(graphe, output, tab_couleurs); sleep(2); } fileSommetsLibere(file); wait(NULL); } }