Vous êtes sur la page 1sur 6

3- Entre les couples de sommets :

On va calculer le plus court chemin pour chaque couple de sommets dans un graphe orienté.
Si tous les arcs ont tous de longueur positive ou nulle, on peut appliquer n fois l’algorithme de Moore
Dijkstra pour chaque sommet i.
Si le graphe comporte des arcs de longueur strictement négative, on peut appliquer n fois
l’algorithme de Bellman-Ford.
L’algorithme qu’on va étudier est celui de FLOYD-WARSHALL.

a.) Algorithme de FLOYD-WARSHALL :


Cet algorithme prend en entrée un graphe orienté et valué sous forme d’une matrice d’adjacence
donnant le poids d’un arc lorsque l’arc existe et la valeur infinie (∞) sinon. Les arcs du graphe
peuvent avoir des poids négatifs mais le graphe ne doit pas posséder de circuit de longueur
strictement négative.

Soient les matrices : L = [lij] et P = [pij]

𝑙(𝑖, 𝑗) 𝑠𝑖 (𝑖, 𝑗) ∈ U
lij = {
∞ 𝑠𝑖𝑛𝑜𝑛

A l’initialisation :
lii = 0
0 𝑠𝑖 𝑙𝑖𝑗 = ∞
pij = {
𝑖 𝑠𝑖𝑛𝑜𝑛

En fin de l’algorithme :
lij : longueur du plus court chemin entre i et j
pij : prédécesseur de j sur le plus court chemin de i à j
 Algorithme :

POUR k = 1 à n
POUR i = 1 à n (sauf k)
SI lik + lki < 0 ALORS STOP (présence d’un circuit absorbant)
SI lik ≠ ∞ ALORS
POUR j = 1 à n (sauf i)
SI lik + lkj < lij ALORS
lij = lik + lkj
pij = pkj
FIN
FIN
FIN
FIN
FIN

 Application :

1 2
2

2 4 2
-2

1
3 4

3
k=0

L(0) = 0 3 ∞ 3
2 0 2 2
-2 ∞ 0 1
∞ 4 4 0

P(0) = 1 1 0 1
2 2 2 2
3 0 3 3
0 4 4 4

k=1

i=2

l(2,1) + l(1,2) = 2 + 3
l(2,1) = 2 ≠ ∞

j=1
l(2,1) + l(1,1) < l(2,1) ?
2+0<2?

j=3

l(2,1) + l(1,3) < l(2,3) ?


2+ ∞<2?

j=4

l(2,1) + l(1,4) < l(2,4) ?


2+3<2?

i=3

l(3,1) + l(1,3) = -2 + ∞
l(3,1) = -2 ≠ ∞

j=1
l(3,1) + l(1,1) < l(3,1) ?
-2 + 0 < -2 ?

j=2

l(3,1) + l(1,2) < l(3,2) ?


-2 + 3 < ∞ ?
l(3,2) = l(3,1) + l(1,2) = 1
p(3,2) = p(1,2) = 1

j=4
l(3,1) + l(1,4) < l(3,4) ?
-2 + 3 < 1 ?

i=4

l(4,1) + l(1,4) = ∞ + 3
l(4,1) = ∞

L(1) = 0 3 ∞ 3
2 0 2 2
-2 1 0 1
∞ 4 4 0

P(1) = 1 1 0 1
2 2 2 2
3 1 3 3
0 4 4 4

TODO : faire le calcul pour k = 2, k = 3 et k = 4

k=2

L(2) = 0 3 5 3
2 0 2 2
-2 1 0 1
6 4 4 0

P(2) = 1 1 2 1
2 2 2 2
3 1 3 3
2 4 4 4

k=3

L(3) = 0 3 5 3
0 0 2 2
-2 1 0 1
2 4 4 0

P(3) = 1 1 2 1
3 2 2 2
3 1 3 3
3 4 4 4
k=4

L(4) = 0 3 5 3
0 0 2 2
-2 1 0 1
2 4 4 0

P(4) = 1 1 2 1
3 2 2 2
3 1 3 3
3 4 4 4

Plus courts chemins :

Origine : sommet 1

1 2

3 4

Origine : sommet 2

1 2

3 4
Origine : sommet 3

1 2

3 4

Origine : sommet 4

1 2

3 4

Vous aimerez peut-être aussi