Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant...
-
Upload
amable-lebeau -
Category
Documents
-
view
107 -
download
0
Transcript of Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant...
![Page 1: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/1.jpg)
Module 5 : Algorithmes de graphes
![Page 2: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/2.jpg)
19/7/2006 Algorithmes de graphes 2
Plan du module Arbre couvrant minimum
Algorithme de Prim Algorithmes de plus court chemin
Algorithme de Dijkstra Algorithme de Floyd
Problème 10034
![Page 3: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/3.jpg)
19/7/2006 Algorithmes de graphes 3
Arbre couvrant minimum Un arbre couvrant pour un graphe non-
orienté G est composé de tous les sommets de G avec un sous-ensemble des arêtes de G qui Relient les sommets; il existe un chemin
entre tous les sommets de l’arbre couvrant Forment un arbre sans racine, non
ordonné, sans cycle.
![Page 4: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/4.jpg)
19/7/2006 Algorithmes de graphes 4
Arbre couvrant minimum Un arbre couvrant minimum est un
arbre couvrant dont la somme des étiquettes (valeurs attachées aux arêtes) est minimale.
![Page 5: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/5.jpg)
19/7/2006 Algorithmes de graphes 5
Arbre couvrant minimum
a
ce
d
b2
45
9
6
4
5
5
a
ce
d
b2
45
9
6
4
5
5
![Page 6: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/6.jpg)
19/7/2006 Algorithmes de graphes 6
Arbre couvrant minimum Algorithme de Prim
L’arbre est construit nœud après nœud partant d’un nœud initial
À chaque itération un nœud est ajouté à l’arbre couvrant
On ajoute toujours le nœud reliant l’arbre avec l’arête de moindre poids
![Page 7: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/7.jpg)
19/7/2006 Algorithmes de graphes 7
Arbre couvrant minimum
a
ce
d
b2
45
9
6
4
5
5
A B C D E
intree F F F F F
distance ∞ ∞ ∞ ∞ ∞
parent -1 -1 -1 -1 -1
a
ce
d
b2
45
9
6
4
5
5
A B C D E
intree T F F F F
distance 0 ∞ ∞ ∞ ∞
parent -1 -1 -1 -1 -1
![Page 8: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/8.jpg)
19/7/2006 Algorithmes de graphes 8
Arbre couvrant minimum
a
ce
d
b2
45
9
6
4
5
5
A B C D E
intree T F F F F
distance 0 9 5 2 ∞
parent -1 A A A -1
Le nœud de départ est A.La table des distances et des parents est mise à jour pour tous les nœuds adjacents à A.On sélectionne parmi les nœuds restants celui relié par l’arête de plus petit poids.
![Page 9: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/9.jpg)
19/7/2006 Algorithmes de graphes 9
Arbre couvrant minimum
a
ce
d
b2
45
9
6
4
5
5
A B C D E
intree T F F T F
distance 0 6 4 2 4
parent -1 D D A D
Le nœud de départ est D.La table des distances et des parents est mise à jour pour tous les nœuds adjacents à D pas encore dans l’arbre.On sélectionne parmi les nœuds restants celui relié par l’arête de plus petit poids (ici C et E possibles).
![Page 10: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/10.jpg)
19/7/2006 Algorithmes de graphes 10
Arbre couvrant minimum
a
ce
d
b2
45
9
6
4
5
5
A B C D E
intree T F T T F
distance 0 6 4 2 4
parent -1 D D A D
Le nœud de départ est C.La table des distances et des parents est mise à jour pour tous les nœuds adjacents à C pas encore dans l’arbre.On sélectionne parmi les nœuds restants celui relié par l’arête de plus petit poids.
![Page 11: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/11.jpg)
19/7/2006 Algorithmes de graphes 11
Arbre couvrant minimum
a
ce
d
b2
45
9
6
4
5
5
A B C D E
intree T F T T T
distance 0 5 4 2 4
parent -1 E D A D
Le nœud de départ est E.La table des distances et des parents est mise à jour pour tous les nœuds adjacents à E pas encore dans l’arbre.On sélectionne parmi les nœuds restants celui relié par l’arête de plus petit poids.
![Page 12: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/12.jpg)
19/7/2006 Algorithmes de graphes 12
Arbre couvrant minimum
a
ce
d
b2
45
9
6
4
5
5
A B C D E
intree T T T T T
distance 0 5 4 2 4
parent -1 E D A D
Plus rien ne change.La table parent nous fournit l’arbre de couvrant minimum!
a
ce
d
b2
45
9
6
4
5
5
![Page 13: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/13.jpg)
19/7/2006 Algorithmes de graphes 13
Arbre couvrant minimum FOR i := 0 TO g.nvertices-1 DO BEGIN intree[i] := false; distance[i] := MAXINT; parent[i] := -1 END; distance[start] := 0; v := start; WHILE NOT intree[v] DO BEGIN intree[v] := true; FOR i := 0 TO g.degree[v]-1 DO BEGIN w := g.edges[v][i].v; weight := g.edges[v][i].weight; IF (distance[w] > weight) AND NOT intree[w] THEN BEGIN distance[w] := weight; parent[w] := v END END;
v := start; dist := MAXINT; FOR i := 0 TO g.nvertices-1 DO BEGIN IF (NOT intree[i]) AND (dist > distance[i]) THEN BEGIN dist := distance[i]; v := i END END
![Page 14: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/14.jpg)
19/7/2006 Algorithmes de graphes 14
Algorithmes de plus court chemin Soit un graphe orienté ou non ayant des
étiquettes sur les arêtes pour représenter leur « longueur ».
On veut connaître la « distance » minimale entre deux sommets.
En général, la distance minimale d’un sommet u au sommet v est la distance minimum de tous les chemins de u à v.
![Page 15: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/15.jpg)
19/7/2006 Algorithmes de graphes 15
Algorithme de Dijkstra C’est l’algorithme de choix pour trouver
le chemin de distance minimum entre deux nœuds d’un graphe.
Cet algorithme calcule le plus court chemin entre un nœud donné et tous les autres d’un graphe.
Ne fonctionne que sur des graphes sans arêtes négatives.
![Page 16: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/16.jpg)
19/7/2006 Algorithmes de graphes 16
Algorithme de Dijkstra L’idée de base est très semblable à
l’algorithme de Prim. À chaque itération, on ajoute un nœud à
l’arbre de nœuds pour lequel nous connaissons le plus court chemin depuis la source s.
![Page 17: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/17.jpg)
19/7/2006 Algorithmes de graphes 17
Algorithme de Dijkstra Mais dans le problème du plus court
chemin : nous ajoutons un nœud qui est le plus
proche en distance de la source s Cette distance est fonction du poids de la
nouvelle arête et de la distance depuis la source s de l’arbre de nœuds auquel l’arête est adjacente.
![Page 18: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/18.jpg)
19/7/2006 Algorithmes de graphes 18
0
105
2
1
3 4
2
6
97
s
u v
x y
8 8
8 8Algorithme de Dijkstra
![Page 19: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/19.jpg)
19/7/2006 Algorithmes de graphes 19
0
5
10
105
2
1
3 4
2
6
97
s
u v
x y
8
8
(s,x) est le plus court chemin utilisant une seule arête.
C’est aussi le plus court chemin de s à x.
Algorithme de Dijkstra
![Page 20: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/20.jpg)
19/7/2006 Algorithmes de graphes 20
0
7
14
5
8
105
2
1
3 4
2
6
97
s
u v
x y
Algorithme de Dijkstra
![Page 21: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/21.jpg)
19/7/2006 Algorithmes de graphes 21
0
7
13
5
8
105
2
1
3 4
2
6
97
s
u v
x y
Algorithme de Dijkstra
![Page 22: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/22.jpg)
19/7/2006 Algorithmes de graphes 22
0
7
9
5
8
105
2
1
3 4
2
6
97
s
u v
x y
Algorithme de Dijkstra
![Page 23: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/23.jpg)
19/7/2006 Algorithmes de graphes 23
0
7
9
5
8
105
2
1
3 4
2
6
97
s
u v
x y
Algorithme de Dijkstra
![Page 24: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/24.jpg)
19/7/2006 Algorithmes de graphes 24
Algorithme de DijkstraBEGIN FOR i := 0 TO g.nvertices-1 DO BEGIN intree[i] := false; distance[i] := inf; parent[i] := -1 END; distance[start] := 0; v := start; WHILE NOT intree[v] DO BEGIN intree[v] := true; FOR i := 0 TO g.degree[v]-1 DO BEGIN w := g.edges[v][i].v; 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;
v := 0; dist := MAXINT; FOR i := 0 TO g.nvertices-1 DO BEGIN IF (NOT intree[i]) AND (dist > distance[i]) THEN BEGIN dist := distance[i]; v := i END END END; print_shortest_paths(g,0)END;
![Page 25: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/25.jpg)
19/7/2006 Algorithmes de graphes 25
Algorithme de Floyd
Trouver tous les plus courts chemins entre toutes les paires de nœuds d’un graphe.
Le graphe peut contenir des arêtes négatives, mais pas de cycle à coût négatif
![Page 26: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/26.jpg)
19/7/2006 Algorithmes de graphes 26
Algorithme de Floyd Représentation du graphe :
Une matrice de poids W(i,j)=0 si i=j W(i,j)= s’il n’y a pas d’arête entre i et j W(i,j) = “poids de l’arête”
![Page 27: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/27.jpg)
19/7/2006 Algorithmes de graphes 27
Algorithme de Floyd
1 2 3 4 5
1 0 1 1 5
2 9 0 3 2
3 0 4
4 2 0 3
5 3 0
v1 v2
v3v4
v5
32
2
4
1
3
1
93
5
![Page 28: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/28.jpg)
19/7/2006 Algorithmes de graphes 28
Algorithme de Floyd
Comment définir la distance la plus courte di,j en termes de problèmes plus “petits”?
Une façon de faire consiste à se limiter à des chemins n’incluant que des nœuds d’un sous-ensemble restreint.
![Page 29: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/29.jpg)
19/7/2006 Algorithmes de graphes 29
Algorithme de Floyd Initialement, ce sous-ensemble est
vide. Ensuite il est augmenté
progressivement, un nœud à la fois, jusqu’à ce qu’il contienne tous les nœuds du graphe.
![Page 30: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/30.jpg)
19/7/2006 Algorithmes de graphes 30
Algorithme de Floyd
Soit D(k)[i,j]=poids du plus court chemin de vi à vj n’utilisant que les nœuds {v1,v2,…,vk} comme nœuds intermédiaires dans le chemin D(0)=W D(n)=D c’est la matrice finale
Comment calculer D(k) depuis D(k-1) ?
![Page 31: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/31.jpg)
19/7/2006 Algorithmes de graphes 31
Algorithme de Floyd
Cas 1: Un plus court chemin de vi à vj limité aux nœuds {v1,v2,…,vk} comme nœuds intermédiaires n’utilise pas vk. Alors D(k)[i,j]= D(k-1)[i,j].
Cas 2: Un plus court chemin de vi à vj limité aux nœuds {v1,v2,…,vk} comme nœuds intermédiaires utilise vk. Alors D(k)[i,j]= D(k-1)[i,k]+ D(k-1)[k,j].
Vi
Vj
Vk
Plus court chemin utilisant les nœuds { V1, . . . Vk -1 }
Plus court chemin utilisant les nœuds {V1, . . . Vk }
![Page 32: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/32.jpg)
19/7/2006 Algorithmes de graphes 32
Algorithme de Floyd
Comme D(k)[i,j]= D(k-1)[i,j] orD(k)[i,j]= D(k-1)[i,k]+ D(k-1)[k,j].
On obtient: D(k)[i,j]= min{ D(k-1)[i,j], D(k-1)[i,k]+ D(k-1)[k,j] }
Vi
Vj
Vk
Plus court chemin utilisant les nœuds { V1, . . . Vk -1 }
Plus court chemin utilisant les nœuds {V1, . . . Vk
}
![Page 33: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/33.jpg)
19/7/2006 Algorithmes de graphes 33
Algorithme de Floyd
W = D0 =40 5
2 0 -3 0
1 2 31
2
3
00 0
0 0 0
0 0 0
1 2 31
2
3
P =
1
2
3
5
-3
24
![Page 34: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/34.jpg)
19/7/2006 Algorithmes de graphes 34
D1 =40 5
2 0 7
-3 0
1 2 31
2
3
00 0
0 0 1
0 0 0
1 2 31
2
3
P =
Algorithme de Floyd
D1[2,3] = min( D0[2,3], D0[2,1]+D0[1,3] )
= min (, 7)
= 7
D1[3,2] = min( D0[3,2], D0[3,1]+D0[1,2] )
= min (-3,)
= -3
K = 1Le nœud 1 peut être nœud intermédiaire.
![Page 35: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/35.jpg)
19/7/2006 Algorithmes de graphes 35
D2 =40 5
2 0 7
-1 -3 0
1 2 31
2
3
00 0
0 0 1
2 0 0
1 2 31
2
3
P =
Algorithme de Floyd
D2[1,3] = min( D1[1,3], D1[1,2]+D1[2,3] )
= min (5, 4+7)
= 5
D2[3,1] = min( D1[3,1], D1[3,2]+D1[2,1] )
= min (, -3+2)
= -1
K = 2Les nœuds 1 et 2 peuvent être nœuds intermédiaires.
![Page 36: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/36.jpg)
19/7/2006 Algorithmes de graphes 36
D3 =20 5
2 0 7
-1 -3 0
1 2 31
2
3
30 0
0 0 1
2 0 0
1 2 31
2
3
P =
Algorithme de Floyd
D3[1,2] = min(D2[1,2], D2[1,3]+D2[3,2] )
= min (4, 5+(-3))
= 2
D3[2,1] = min(D2[2,1], D2[2,3]+D2[3,1] )
= min (2, 7+ (-1))
= 2
K = 3Les nœuds 1, 2, 3 peuvent être nœuds intermédiaires.
![Page 37: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/37.jpg)
19/7/2006 Algorithmes de graphes 37
Algorithme de Floyd
1. D W // initialiser D avec les poids des arêtes2. P 0 // initialiser P à 03. for k 1 to n4. do for i 1 to n5. do for j 1 to n6. if (D[ i, j ] > D[ i, k ] + D[ k, j ] ) 7. then D[ i, j ] D[ i, k ] + D[ k, j ]
8. P[ i, j ] k;
![Page 38: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/38.jpg)
19/7/2006 Algorithmes de graphes 38
Algorithme de Floyd Pourquoi peut-on travailler sur une
même matrice ? D[i,j] ne dépend que des éléments de la
kième ligne et kième colonne de la matrice. La kième ligne et kième colonne de la
matrice restent inchangées lorsqu’on calcule Dk
![Page 39: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/39.jpg)
19/7/2006 Algorithmes de graphes 39
Algorithme de Floyd Les éléments de la diagonale principale
restent à 0 car : D(k)[ j,j ] = min{ D(k-1)[ j,j ] , D(k-1)[ j,k ] + D(k-1)[ k,j ] }
= min{ 0, D(k-1)[ j,k ] + D(k-1)[ k,j ] } = 0
![Page 40: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/40.jpg)
19/7/2006 Algorithmes de graphes 40
Algorithme de Floyd La kième colonne de Dk est égale à la
kième colonne de Dk-1 :
Pour tout i D(k)[i,k] = min{ D(k-1)[i,k], D(k-1)[i,k]+ D(k-1)[k,k] }
= min { D(k-1)[i,k], D(k-1)[i,k]+0 } = D(k-1)[i,k]
![Page 41: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/41.jpg)
19/7/2006 Algorithmes de graphes 41
Algorithme de Floyd La kième ligne de Dk est égale à la
kième ligne de Dk-1 :
Pour tout i D(k)[k,j] = min{ D(k-1)[k,j], D(k-1)[k,k]+ D(k-1)[k,j] }
= min{ D(k-1)[ k,j ], 0+D(k-1)[k,j ] }
= D(k-1)[ k,j ]
![Page 42: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/42.jpg)
19/7/2006 Algorithmes de graphes 42
Algorithme de Floyd FOR k := 1 TO g.nvertices DO FOR i := 1 TO g.nvertices DO FOR j := 1 TO g.nvertices DO BEGIN through_k := g.weight[i,k]+g.weight[k,j]; IF through_k < g.weight[i,j] THEN BEGIN g.weight[i,j] := through_k; p[i,j] := k END END
![Page 43: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/43.jpg)
19/7/2006 Algorithmes de graphes 43
Problème 10034 In an episode of the Dick Van Dyke show, little Richie
connects the freckles on his Dad's back to form a picture of the Liberty Bell. Alas, one of the freckles turns out to be a scar, so his Ripley's engagement falls through. Consider Dick's back to be a plane with freckles at various (x,y) locations. Your job is to tell Richie how to connect the dots so as to minimize the amount of ink used. Richie connects the dots by drawing straight lines between pairs, possibly lifting the pen between lines. When Richie is done there must be a sequence of connected lines from any freckle to any other freckle.
![Page 44: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/44.jpg)
19/7/2006 Algorithmes de graphes 44
Problème 10034 Input
The input begins with a single positive integer on a line by itself indicating the number of the cases following, each of them as described below. This line is followed by a blank line, and there is also a blank line between two consecutive inputs.
The first line contains 0 < n <= 100, the number of freckles on Dick's back. For each freckle, a line follows; each following line contains two real numbers indicating the (x,y) coordinates of the freckle.
Output For each test case, the output must follow the description
below. The outputs of two consecutive cases will be separated by a blank line.
Your program prints a single real number to two decimal places: the minimum total length of ink lines that can connect all the freckles.
![Page 45: Module 5 : Algorithmes de graphes. 19/7/2006Algorithmes de graphes2 Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court.](https://reader035.fdocuments.fr/reader035/viewer/2022062511/551d9da2497959293b8d1d66/html5/thumbnails/45.jpg)
19/7/2006 Algorithmes de graphes 45
Problème 10034Sample Input
1
31.0 1.02.0 2.02.0 4.0
Sample Output
3.41