4 Parcours en largeur L’algorithme ?? présente la procédure de parcours en largeur d’un graphe nonorienté. (NB : l’algorithme est identique pour les graphes orientés). Procédure PL(G,s) //G = (S, A) begin pour chaque x 2 S\{s} faire Couleur[x] := blanc ; ⇧[x] := nil ; Dist[x] := 1 ; Couleur[s] := gris; ⇧(s) := nil; Dist[s] := 0 ; F := File vide // File = structure FIFO Ajouter(F, s) tant que F 6= ; faire x := ExtraireTête(F ); pour chaque (x, y) 2 A faire si Couleur[y] = blanc alors Couleur[y] := gris ; Dist[y] := Dist[x] + 1 ; ⇧[y] := x ; Ajouter(F, y) ; Couleur[x] := noir end Algorithme 2 : algorithme de parcours en largeur Discuter le codage de l’arbre de parcours sous la forme d’une table des prédécesseurs. Idée générale. Étant donnés un graphe G et un sommet s, l’algorithme va parcourir les sommets accessibles depuis s en commençant par ceux situés à la distance 1, puis ceux situés à la distance 2, etc. De plus, l’algorithme va (1) calculer la distance de chaque sommet à l’origine s, et (2) construire un arbre G⇧ = (S⇧ , A⇧ ) contenant les sommets accessibles depuis s et tel que chaque chemin de s à u dans G⇧ soit un plus court chemin de G. NB : ici la longueur d’un chemin est le nombre de transitions le long de ce chemin. On va utiliser les trois couleurs (blanc, gris, noir) pour marquer les états. Le sens de ce coloriage est le suivant : — blanc : c’est la couleur des sommets non encore découverts (et c’est la couleur de chaque sommet, excepté s, à l’initialisation) ; — gris : c’est la couleur des sommets déjà découverts et dont les successeurs (immédiats) n’ont pas encore été tous découverts ; — noir : caractérise les sommets découverts dont tous les successeurs (immédiats) ont aussi été découverts. 10