Vous êtes sur la page 1sur 3

CPGE-AGADIR MP-PSI

RECHERCHE DU PLUS COURT CHEMIN DANS UN GRAPHE

ALGORITHME DE DIJKSTRA

E. W. Dijkstra (1930-2002) a proposé en 1959 un algorithme qui permet de déterminer le plus court chemin entre
deux sommets d'un graphe connexe pondéré (orienté ou non) dont le poids lié aux arêtes est positif ou nul.

Exemple

Le graphe ci-contre représente le réseau 2


A D
routier d'une région qui prend en
compte le sens de la circulation, chaque 5 2
7 arc
1 4
représente une route à sens unique
dont le poids est la distance en 3 1
kilomètre entre deux sommets. Quel est E B G S
4
l'itinéraire le plus court qui relie E à S ? 2
1 3 6

2
C F

Algorithme de Dijkstra

L'algorithme dû à Dijkstra est basé sur le principe suivant :

Si le plus court chemin reliant E à S passe par les sommets s1 , s2 , …, sk alors, les différentes étapes sont aussi les plus
courts chemins reliant E aux différents sommets s1 , s2 , …, sk.

On construit de proche en proche le chemin cherché en choisissant à chaque itération de l'algorithme, un sommet si
du graphe parmi ceux qui n'ont pas encore été traités, tel que la longueur connue provisoirement du plus court
chemin allant de E à si soit la plus courte possible.

Initialisation de l'algorithme :

Étape 1 : On affecte le poids 0 au sommet origine (E) et on attribue provisoirement un poids ∞ aux autres sommets.

Répéter les opérations suivantes tant que le sommet de sortie (S) n'est pas affecté d'un poids définitif.

Étape 2 : Parmi les sommets dont le poids n'est pas définitivement fixé choisir le sommet X de poids p minimal.
Marquer définitivement ce sommet X affecté du poids p(X).

Étape 3 : Pour tous les sommets Y qui ne sont pas définitivement marqués, adjacents au dernier sommet fixé X :

 Calculer la somme s du poids de X et du poids de l'arête reliant X à Y.


 Si la somme s est inférieure au poids provisoirement affecté au sommet Y, affecter provisoirement à Y le
nouveau poids s et indiquer entre parenthèses le sommet X pour se souvenir de sa provenance.

Quand le sommet S est définitivement marqué

Le plus court chemin de E à S s'obtient en écrivant de gauche à droite le parcours en partant de la fin S.

Graphes – Algorithme Dijkstra 1 /3 M.GUEROIHI


Pour faciliter la recherche du plus court chemin il est commode de présenter les résultats dans un tableau :

E A B C D F G S Sommet sélectionné et commentaires


0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ E de poids 0 on marque les sommets adjacents A, B et C

2(E C on sélectionne les sommets adjacents G et F, on les


5(E) 3(E) ∞ ∞ ∞ ∞
) marque provisoirement G(2+3) et F(2+2)

B le sommet adjacent A est affecté d'un poids égal à 4


5(B) 3(E) ∞ 4(C) 5(C) ∞
(3+1<5)

A le sommet D va être marqué provisoirement avec un


4(B) ∞ 4(C) 5(C) ∞
poids 6= 4+2

F le sommet adjacent D sera affecté d'un poids égal à 5


6(A) 4(C) 5(C) ∞ (4+1<6) le sommet S va être marqué provisoirement
avec un poids 10= 4+6

5(F) 5 (C) 10 (F) D on conservera le poids de S (5+7>10)

5 (C) 10 (F) G le sommet adjacent est déjà traité

10 (F) S

Pour déterminer le trajet le plus court on remonte les sommets en partant de S :

S vient de F qui vient de C qui vient de E.

Le plus court chemin est E-C-F-S, la distance parcourue est de 10 km.

Graphes – Algorithme Dijkstra 2 /3 M.GUEROIHI


Exercice :

Déterminer le chemin le plus court entre I et J dans le graphe suivant :

9 D 7
A E
6
5 4
2 2
3

8 2 9 J
I G H

3 1 5
6 3 4

7 8
B C F

Présenter les résultats dans un tableau.

I A B C D E F G H J Sommet sélectionné
0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞

Graphes – Algorithme Dijkstra 3 /3 M.GUEROIHI

Vous aimerez peut-être aussi