Académique Documents
Professionnel Documents
Culture Documents
Algorithmes de graphes
Plan du module
Arbre couvrant minimum
Algorithme de Prim
Algorithmes de plus court chemin
Algorithme de Dijkstra
Algorithme de Floyd
Problème 10034
5 e 5 e
c c
5 e 5 e
c c
A B C D E A B C D E
intree F F F F F intree T F F F F
distance ∞ ∞ ∞ ∞ ∞ distance 0 ∞ ∞ ∞ ∞
parent -1 -1 -1 -1 -1 parent -1 -1 -1 -1 -1
5 e 9 b
c
a 2 6
d
A B C D E 4 5
5 4
intree T T T T T
distance 0 5 4 2 4
5 e
c
parent -1 E D A D
8
10
9
s 0 2 3 4 6
7
5
8
2 8
x y
19/7/2006 Algorithmes de graphes 18
Algorithme de Dijkstra
u v
1 (s,x) est le plus
10 court chemin
8
utilisant une seule
10 arête.
9
C’est aussi le
plus court chemin
s 0 2 3 4 6 de s à x.
7
5
5
8
2
x y
19/7/2006 Algorithmes de graphes 19
Algorithme de Dijkstra
u v
1
8 14
10
9
s 0 2 3 4 6
7
5
5 7
2
x y
19/7/2006 Algorithmes de graphes 20
Algorithme de Dijkstra
u v
1
8 13
10
9
s 0 2 3 4 6
7
5
5 7
2
x y
19/7/2006 Algorithmes de graphes 21
Algorithme de Dijkstra
u v
1
8 9
10
9
s 0 2 3 4 6
7
5
5 7
2
x y
19/7/2006 Algorithmes de graphes 22
Algorithme de Dijkstra
u v
1
8 9
10
9
s 0 2 3 4 6
7
5
5 7
2
x y
19/7/2006 Algorithmes de graphes 23
Algorithme de Dijkstra
BEGIN v := 0;
FOR i := 0 TO g.nvertices-1 DO dist := MAXINT;
BEGIN FOR i := 0 TO g.nvertices-1 DO
intree[i] := false; distance[i] := inf; parent[i] := -1 BEGIN
END; IF (NOT intree[i]) AND (dist > distance[i])
distance[start] := 0; THEN BEGIN
v := start; dist := distance[i];
WHILE NOT intree[v] DO v := i
BEGIN END
intree[v] := true; END
FOR i := 0 TO g.degree[v]-1 DO END;
BEGIN print_shortest_paths(g,0)
w := g.edges[v][i].v; END;
weight := g.edges[v][i].weight;
IF (distance[w] > distance[v]+weight) AND NOT intree[w]
THEN BEGIN
distance[w] := distance[v]+weight;
parent[w] := v
END
END;
Vk
Vj
Vi
Vj
Vi
3
1.0 1.0
2.0 2.0
2.0 4.0
Sample Output
3.41