next up previous contents index
Next: Tri topologique d'un graphe Up: Piles Previous: Piles

      
Parcours en profondeur

Il est possible de transformer la version récursive du parcours en profondeur en une version itérative, à l'aide d'une pile. Les sommets du graphe sont empilés et traités au dépilement. Seules importent les fonctionnalités des piles, une implémentation quelconque des piles peut être utilisée. L'ensemble des sommets visités est la réunion de l'ensemble des sommets visités une première fois (qui sont dans la pile) et de l'ensemble des sommets traités (qui ont été dépilés).

  static void parcoursProfondeur(Sommet origine, 
                                 Set sommetsVisités,
                                 Traitement pré, 
                                 Traitement post) {
    Pile pile = new PileParListe() ;
    pile.empiler(origine);
    sommetsVisités.add(origine);
    while (!pile.estVide()) {
      Sommet s = (Sommet)pile.dépiler();
      pré.traite(s);
      Iterator i = s.adjacents();
      while (i.hasNext()) { 
        Sommet suivant = (Sommet)i.next();
        if (!sommetsVisités.contains(suivant)) {
          pile.empiler(suivant);
          sommetsVisités.add(suivant);
        }
      }
      post.traite(s);
    }
  }



R. Lalement
2000-10-23