ENSIN5U1 - Algorithmique avancée
TD1 --Tri topologique
Michel Van Caneghem -- d'après les documents de Stéphane Grandcolas
10 septembre 2012
Problème
Etant donné un graphe orienté acyclique G= (S,A), on veut trouver un ordre linéaire
(total) des sommets de Gtel que si (u,v)∈Aalors uapparaît avant vdans cet ordre
linéaire. Si le graphe n'est pas acyclique, un tel ordre n'existe pas.
Algorithme
On trouve un tel ordre en faisant un parcours en profondeur du graphe :
1. appeler la fonction ParcoursEnProfondeur(G) pour calculer les fins de traitements
f(v)pour chaque sommet v,
2. chaque fois que le traitement d'un sommet s'achève, l'insérer dans une liste chainée,
3. renvoyer cette liste chainée.
Question 0. Ce tri sert à beaucoup de choses (PERT, make, ...).
Ordonnez les sommets du graphe à droite.
Vous pouvez rajouter une arête pour créer un cycle et voir ce
qu'il se passe.
Question 1. Ecrire en C les deux fonctions vues en cours, qui mettent en oeuvre le parcours
en profondeur d'un graphe.
Question 2. Ecrire en C une fonction TriTopologique qui pour un graphe donné représenté
par des listes d'adjacence, construit la liste chainée des sommets triés topologiquement.
Question 3. Quelle est la complexité de cet algorithme ?
Rappel : étant donnée une arborescence en profondeur du graphe orienté G= (S,A), ont
dit que (u,v)est un arc de retour si uest un descendant de vdans cette arborescence (et
donc d[v]<d[u]<f[u]<f[v]).
Question 4. Montrez que Gcontient un cycle si et seulement si un parcours en profondeur
de Ggénère un arc de retour.
Question 5. Justifiez la validité de la fonction TriTopologique.
§§§§§§§§§§§§§§§§§§§§§§§§§§§
1