L3

Ressources utiles (Hum, ça va ?)

Explications de bases

Vocabulaire

Un graphe est non orienté quand les sommets sont reliés entre eux par de simples traits (des arcs).

Un graphe est orienté lorsque les sommets sont reliés entre eux par des flèches (des arêtes).

Matrice et liste d'adjacence

Par exemple, pour le graphe:


                +-----+                    +-----+
                |  1  |------------------->|  2  |
                +-----+                    +-----+
                   |
                   |
                   |
                   v
                +-----+
                |  3  |
                +-----+

La matrice d'adjacence correspondante est (la première ligne est le point de départ):

Graphe orienté Graphe non-orienté

          +---+-----------+
          |   | 1 | 2 | 3 |
          |---|-----------|
          | 1 | 0 | 0 | 0 |
          | 2 | 1 | 0 | 0 |
          | 3 | 1 | 0 | 0 |
          +---+-----------+

          +---+-----------+
          |   | 1 | 2 | 3 |
          |---|-----------|
          | 1 | 0 | 1 | 1 |
          | 2 | 1 | 0 | 0 |
          | 3 | 1 | 0 | 0 |
          +---+-----------+

Et la liste d'adjacence correspondante est:

Graphe orienté Graphe non orienté

    +-----+   _____    _____
    |  1  |->|  2  |->|  3  |->Nil
    +-----+   -----    -----
    |  2  |-> Nil
    +-----+
    |  3  |-> Nil
    +-----+

    +-----+   _____    _____
    |  1  |->|  2  |->|  3  |->Nil
    +-----+   -----    -----
    |  2  |->|  1  |->Nil
    +-----+   -----
    |  3  |->|  1  |->Nil
    +-----+   -----

Algorithmes utiles

Coloration: Pour représenter le parcours, l'algorithme utilise la coloration avec la convention:

Parcours en Largeur (PeL)

procédure PeL(Entrée: G = <S, A> : Graphe)
  var p, d
début
  // p et d sont des tableaux et stockent la liste
  // des prédécesseurs de x et la date à laquelle x
  // a été traité.
  pour x dans S faire
    c(x) = Blanc
    p(x) = Nil
    d(x) = +∞
  fin

  // c(x) représente la couleur de x
  d(S) = 0
  c(S) = Gris
  F    = {S}

  tant que F != Ø faire
    x = tete(F)

    pour y dans Adj(x) faire
      si c(y) = Blanc alors
        p(y) = x
        d(y) = d(x) + 1
        c(y) = Gris
        Enfiler(F, y)
      fin
    fin

    c(x) = Noir
    Defiler(F)
  fin tant que
fin

Parcours en Profondeur (PeP)

procédure PeP(Entrée: G = <S, A> : Graphe)
  var p, d, f
début
  pour x dans S faire
    p(x) = Nil
    c(x) = Blanc
  fin

  temps = 0; // Variable globale

  pour x dans S faire
    si c(x) = Blanc alors
      visiter(x);
    fin
  fin
fin

procédure visiter(Entrée: S : Sommet)
début
  c(x) = Gris
  temps = temps + 1;
  d(x) = temps

  pour y dans Adj(x) faire
    si c(y) = Blanc alots
      p(y) = x
      visiter(y)
    fin
  fin

  c(x) = Noir
  temps = temps + 1;
  f(x) = temps
fin