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 G tel que si (u, v) ∈ A alors u apparaît avant v dans 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 u est un descendant de v dans cette arborescence (et donc d[v] < d[u] < f [u] < f [v]). Question 4. Montrez que G contient un cycle si et seulement si un parcours en profondeur de G génère un arc de retour. Question 5. Justifiez la validité de la fonction TriTopologique. § § § § § § § § § § § § § § § § § § § § § § § § § § § 1