Note
La règle (appelée « principe d’optimalité ») commune aux algorithmes de recherche de plus courts chemins
peut s’énoncer ainsi : un plus court chemin [S1, Sn] entre deux sommets S1 et Sn d’un graphe est constitué
de plus courts chemins reliant deux sommets du chemin [S1, Sn] ; on la démontre par l’absurde sans
problème.
La recherche du plus court chemin passe donc par la recherche des plus courts chemins reliant S1 à tous les
sommets du graphe susceptibles de se trouver sur le trajet ; reste à déterminer dans quel ordre on liste les
sommets intermédiaires : c’est principalement là que résident les différences d’un algorithme à l’autre.
Un des premiers algorithmes est dû au mathématicien FORD : son peu d’efficacité découle du fait qu’on liste
les sommets intermédiaires dans un ordre quelconque : on risque donc de se retrouver un grand nombre de fois
avec les mêmes sommets. Mais aucune hypothèse sur le signe des poids n’est nécessaire.
On donnera une version qui repose sur un examen pré ordonné des sommets, mais elle ne s’applique qu’aux
graphes orientés sans circuits.
Définition 1. – Soit G = (S, A) un graphe orienté, sans circuits et I un sommet choisi comme
sommet initial. On appelle niveau du sommet S∈ S, le nombre maximum d’arcs de tous les chemins
reliant I à S. Le niveau de I est 0.
Remarque : si un chemin reliant I à S contient un circuit, ce maximum n’existe pas, puisqu’à chaque tour de circuit,
on ajoute le nombre d’arcs dudit circuit.
Définition 2. – Un graphe dont les sommets ont été classés par niveau, est appelé graphe
ordonnancé. On dit aussi qu’on a partagé le graphe en niveaux.
Remarque : on « redessine » en général le graphe, en faisant apparaître les niveaux des sommets (voir exemple ci-
dessous).
Exemples :
S5
Le graphe G1 ci-contre ne
possédant aucun circuit, on peut
S4 6 classer les sommets par niveaux.
On choisit comme sommet initial
S5.
Le niveau de S5 est donc 0, celui
de S2 est 1, celui de S3 est 2, celui
6 de S1 est 3 et celui de S4 est 4.
2 9 La figure du graphe ordonnancé
associé au graphe G1 est donnée
S3 ci-dessous :
2
3
S1 6 S2
S3
3 6
S5 S2 S4
6 9
2
6 2
S1
0 1 2 3 4
Note
La question de l’ordonnancement d’un graphe ne doit pas constituer un problème pour les élèves : soit on
donne le graphe ordonnancé, soit on propose un graphe pour lequel l’ordonnancement se fait « naturellement ».
Il est hors de propos de présenter un algorithme donnant un graphe ordonnancé.
Afin de satisfaire votre curiosité et/ou votre soif inextinguible de connaissances (!), en voici un où M est la
matrice associée (encore appelée matrice d’adjacence) au graphe d’origine que l’on veut partager en niveaux :
i=0
Marquer les
colonnes de S(i ) et
Non Oui
barrer les lignes S(i ) = ∅ STOP
correspondantes
Pour vous entraîner (ou vérifier que l’algorithme « fonctionne »), appliquer cet algorithme au graphe de
l’exemple (1) ci-dessus : pour 0 ≤ i ≤ k, S(i ) est l’ensemble des sommets de niveau i. Les ensembles S(i ) sont
des ensembles stables.