#include #include #include #include using namespace std; //--------------------------------------------------------------------------------- // Graphe oriente aleatoire sans boucle ni arc multiple //--------------------------------------------------------------------------------- void Voisins_random(int n, int m, vector voisin[]){ // Calcule un graphe oriente aleatoire. srand(time(NULL)); for (int i=0;i voisin[]){ for(int i=0;i voisin[], int debut[], int fin[], int pere[]){ //On specifie la racine vector listeVois[n]; //Copie des listes de voisins, qui seront modifiees for(int i=0;i atraiter; //Pile int dejavu[n]; //Variable testant si un sommet a ete vu. for(int i=0; i voisin[], int debut[], int fin[], int pere[]){ Parcours_en_profondeur(n,0,voisin,debut, fin, pere); for(int i=0;i voisin[], vector entrant[]){ // // A COMPLETER // //entrant[i] doit contenir la liste des voisins entrants du sommet i } //--------------------------------------------------------------------------------- // Un petit tri (a bulles...), s'en inspirer pour la fonction suivante //--------------------------------------------------------------------------------- void Tri(int k, int tableau[]){ for(int i=0;itableau[j+1]){ int buf=tableau[j]; tableau[j]=tableau[j+1]; tableau[j+1]=buf; } } } } //--------------------------------------------------------------------------------- // Calcul des listes de voisins entrants triees selon la date de fin //--------------------------------------------------------------------------------- void Tri_entrant(int k, vector &tableau,int fin[]){ // // A COMPLETER // //tableau est la liste des sommets entrants d'un sommet, on doit la trier par date de fin croissante } //--------------------------------------------------------------------------------- // Calcul des composantes fortement connexe //--------------------------------------------------------------------------------- void cfc(int n, vector voisin[]){ int debut[n]; // Date de premiere visite d'un sommet. int fin[n]; // Date de derniere visite d'un sommet. int pere[n]; // Les predecesseurs dand l'arbre en largeur. for(int i=0;i entrant[n]; Voisins_Entrants(n,voisin,entrant); //calcul des voisins entrants Parcours_en_profondeur(n,0,voisin, debut, fin, pere); //Decommenter les 2 lignes suivantes pour afficher le parcours //Affichage_du_Parcours(n,voisin,debut,fin,pere); //cout< voisin[n]; // Les listes de voisins des sommets, une liste par sommet. Voisins_random(n,m, voisin); Affiche(n, voisin); cfc(n,voisin); }