Optimisation combinatoire TP2 : Parcours de graphes
Exercice 1. Soit le graphe orienté ci-dessous :
F B A
G D C
a) Pour le sommet A donner le parcours en profondeur du graphe et préciser les différents
types d’arêtes rencontrés. Faire la même chose à partir du sommet E b) Faire la même chose avec le parcours en largeur. Exercice 2. En python on codera un graphe, donné par sommets et listes de successeurs, par une structure de dictionnaire : d={cle_1:val_1,...,cle_n:val_n} et on peut accéder à une valeur par d[cle_i]. Pour nous les clés seront les noms des sommets et les valeurs les listes des successeurs. Par exemple pour les graphe ci-dessus on aura : G={’A’:[’B’], ’B’:[’C’,’D’], ’C’:[’A’], ’D’:[’A’,’C’], ’E’:[’F’,’G’], ’F’:[’B’], ’G’:[’D’,’F’]} On veux générer aléatoirement un graphe à partir d’une liste de sommets. Pour cela on va utiliser l’algorithme suivant : – Pour chaque arrête possible, on tire au hasard l’entier 0 ou 1 – Si on obtient 1, on met cette arrête dans le graphe. Dans Python, les fonctions aléatoires sont dans le paquet random. Regarder sur la docu- mentation Python ce que font les fonctions randrange et choice a) Combien d’arrêtes, au maximum, peux avoir un graphe orienté à n sommets ? Même chose pour un graphe non orienté. On s’interdit les arrêtes partant et arrivant au même sommet. b) Écrire une fonction GrapheOrientAlea(L) qui construit un graphe orienté aléatoire à partir de la liste de sommets L. c) Écrire une fonction GrapheNonOrientAlea(L) qui construit un graphe non orienté aléatoire à partir de la liste de sommets L. Exercice 3. a) Écrire une fonction RechProf(G,s,etat) qui fait la recherche en profondeur dans un graphe G à partir du sommet s et etat étant un dictionnaire de clé les sommets et de valeur 0 ou 1 selon que le sommet a déjà été visité ou non par une recherche en profondeur ; on retournera la suite des sommets visités. b) Faire la même chose pour une fonction de recherche en largeur RechLarg(G,s,etat)