Théorie et algorithmique des graphes

Guillaume Moreau
Ecole Centrale de Nantes
EI1 - eLOGRA, mai 2006
2
Table des matières
1 Eléments de théorie des graphes 5
1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2 Graphes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.1 Définitions . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.2 Voisins - Degrés . . . . . . . . . . . . . . . . . . . . . . 8
1.2.3 Sous-graphes, graphes partiels . . . . . . . . . . . . . . . 9
1.2.4 Graphes non-orientés . . . . . . . . . . . . . . . . . . . . 9
1.3 Chemins, chaînes, cycles . . . . . . . . . . . . . . . . . . . . . . 10
1.4 Composantes fortement connexes - fermeture transitive . . . . . . 13
1.4.1 Composantes fortement connexes . . . . . . . . . . . . . 13
1.4.2 Fermeture transitive . . . . . . . . . . . . . . . . . . . . 13
1.4.3 Graphes fortement connexes . . . . . . . . . . . . . . . . 14
2 Ensembles particuliers dans les graphes 15
2.1 Nombre de stabilité . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2 Nombre d’absorption . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3 Noyau - fonctions de Grundy . . . . . . . . . . . . . . . . . . . . 16
2.3.1 Définitions . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3.2 Exemple de calcul de fonction de Grundy . . . . . . . . . 17
2.4 Nombre chromatique . . . . . . . . . . . . . . . . . . . . . . . . 17
3 Familles de graphes possédant des propriétés particulières 19
3.1 Graphes planaires . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2 Graphes hamiltoniens et eulériens . . . . . . . . . . . . . . . . . 20
3.2.1 Graphes hamiltoniens . . . . . . . . . . . . . . . . . . . . 20
3.2.2 Graphes eulériens . . . . . . . . . . . . . . . . . . . . . . 21
4 Algorithmique des graphes 23
4.1 Représentation en mémoire . . . . . . . . . . . . . . . . . . . . . 23
4.1.1 Matrice d’adjacence . . . . . . . . . . . . . . . . . . . . 23
4.1.2 Tableaux d’arcs . . . . . . . . . . . . . . . . . . . . . . . 24
4.1.3 Tableaux de successeurs . . . . . . . . . . . . . . . . . . 24
4.1.4 Listes chaînées . . . . . . . . . . . . . . . . . . . . . . . 24
3
4 TABLE DES MATIÈRES
4.2 Parcours de graphes . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.2.1 Parcours des arbres . . . . . . . . . . . . . . . . . . . . . 25
4.3 Algorithmes de plus court chemin . . . . . . . . . . . . . . . . . 26
4.3.1 Algorithme de Ford-Bellman . . . . . . . . . . . . . . . . 26
4.3.2 Algorithme de Moore ou de Dijkstra . . . . . . . . . . . . 27
4.3.3 Algorithmes de Bellmann . . . . . . . . . . . . . . . . . 28
4.4 Problème du flot maximal . . . . . . . . . . . . . . . . . . . . . . 31
4.4.1 Définitions . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.4.2 Résolution du problème de flot maximal . . . . . . . . . . 32
4.4.3 Algorithme de Ford-Fulkerson et exemple . . . . . . . . . 34
4.5 Flot maximal à coût minimal . . . . . . . . . . . . . . . . . . . . 38
4.5.1 Définitions . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.5.2 Algorithme de Roy . . . . . . . . . . . . . . . . . . . . . 38
4.5.3 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5 Démonstrations 43
Chapitre 1
Eléments de théorie des graphes
1.1 Introduction
Les graphes constituent une des façons les plus naturelles de représenter bon nom-
bre de problèmes de la vie courante comme de celle d’un ingénieur. Ils sont aussi
représentatifs des résultats les plus fondamentaux de l’algorithmique.
Prenons un exemple simple : nous devons nous déplacer de Nantes à Marseille
en utilisant la route. Dans un premier temps, on ne prend en compte que quelques
grandes villes comme le montre la figure 1.1. Les chiffres sont bien sûr assez loin
de la réalité. Comme il n’existe pas sur ce graphe de route directe entre Nantes et
Marseille, la première question qu’on peut se poser est bien sûr celle de l’existence
d’un itinéraire entre Nantes et Marseille. On introduit ici la notion de fermeture
transitive d’un graphe qui sera étudiée en 1.4.2.
Nantes
Strasbourg
Paris
Bordeaux
Marseille
350
500
350
450
800
800
Figure 1.1: Calculer un itinéraire de Nantes à Marseille
5
6 CHAPITRE 1. ELÉMENTS DE THÉORIE DES GRAPHES
Intuitivement, on trouve assez facilement que sur ce graphe, le chemin le plus
court entre Nantes et Marseille ne passe naturellement pas par Strasbourg. Ici, le
chemin le plus court passe par Bordeaux et fait 800 kilomètres, comme le met en
évidence la figure 1.2. Le problème est résoluble manuellement et intuitivement
sur un petit nombre de villes et de routes. Pour construire les navigateurs GPS
embarqués dans les voitures, ou pour calculer les itinéraires comme sur le site
http://www.viamichelin.comen prenant en compte les quelques dizaines
de milliers de communes de France, cette approche n’est évidemment plus tenable.
On entre dans les algorithmes dits de plus courts chemins que l’on étudiera au
chapitre 4 de ce document.
Nantes
Strasbourg
Paris
Bordeaux
Marseille
350
500
350
450
800
800
Figure 1.2: Le chemin le plus court de Nantes à Marseille
On peut rendre ce problème un peu plus complexe en tenant compte de la nature
des routes qui relient les différentes de villes. Il va de soi qu’on roulera en général
plus vite sur une autoroute que sur une petite route de campagne. Encore que ceci
peut s’avérer faux au moment des départs en vacances... On introduira donc aussi
les problèmes de flots dans les graphes.
Il existe encore un autre type de problème que nous n’avons pas abordé. Il
ne fait pas partie des problèmes de graphes a priori mais peut s’exprimer aussi
sous forme de graphe. C’est un des problèmes fondamentaux de l’algorithmique
théorique, il est usuellement utilisé en théorie de la complexité pour introduire
la classe des problèmes NP-complets. On l’appelle le problème du voyageur de
commerce : il s’agit, toujours dans le même graphe, de déterminer l’itinéraire idéal
d’un voyageur de commerce qui doit passer une et une seule fois par chaque ville,
tout en minimisant le nombre de kilomètres parcourus. On montre qu’il n’existe
1.1. INTRODUCTION 7
pas d’algorithme en temps polynomial
1
pour résoudre le problème.
D’autres types de problèmes utilisent les graphes, en informatique comme
dans d’autres disciplines des sciences de l’ingénieur. Par exemple, si on con-
sidère une carte de France comme celle de la figure 1.3 coloriée de façon à ce
que deux départements adjacents aient une couleur différente, quel est le nombre
de couleurs minimal à utiliser ? On montrera dans la section 3.1 consacrée aux
graphes planaires qu’il faut au minimum 4 couleurs.
Figure 1.3: Colorier une carte de France
Le dernier exemple de cette introduction concerne la gestion de projet. Dans
un projet, un certain nombre de tâches peuvent s’effectuer en même temps que
d’autres tandis qu’au contraire, il est indispensable que certaines tâches aient été
complétées avant que d’autres ne commencent. Cette fois encore, ces dépendances
entre tâches peuvent exprimées sous forme de graphes. Cette approche est valable
pour une recette de cuisine comme pour un planning de PEI mais aussi pour la pro-
grammation parallèle : en effet, pour calculer une moyenne générale, on a besoin
que toutes les moyennes aient été calculées, mais a contrario, pour calculer un pro-
duit matriciel certaines parties peuvent se dérouler en parallèle : dans l’expression
(c
ij
)
1≤i,j≤n
=
n
¸
k=1
a
ik
b
kj
(1.1)
le calcul de c
ij
est indépendant de celui de c
i

j
′ ; ils peuvent donc être calculés
1
c’est-à-dire que le temps d’exécution du programme ne peut pas être une fonction polynomiale
du nombre de sommets du graphe
8 CHAPITRE 1. ELÉMENTS DE THÉORIE DES GRAPHES
indépendamment les uns des autres. Par contre, le calcul d’un c
ij
nécessite que les
calculs de tous les a
ik
b
kj
aient été effectués pour tous les valeurs de k. On appelle
ces graphes des graphes de dépendance.
1.2 Graphes
1.2.1 Définitions
Définition 1.2.1 Un graphe G = (X, U) est le couple constitué d’un ensemble
dénombrable de sommets X et d’une famille U d’éléments de X
2
appelés arcs.
Dans ce cours, nous n’aborderons que les cas où X est fini. On représente les
sommets par des points et les arcs correspondant à un couple de sommets (x, y)
par une ligne joignant x à y, portant une flèche de x vers y. On dit alors que x est
l’origine de l’arc, tandis que y est son extrémité.
Un exemple de graphe est représenté figure 1.4.
E
F
D
B
C
A
Figure 1.4: Exemple de graphe
S’il existe deux arcs reliant les mêmes sommets, on parle de graphes multiples
ou multigraphes comme celui représenté sur la figure 1.5. Dans ce cours, nous
nous intéresserons essentiellement aux graphes simples et souvent sans boucles.
1.2.2 Voisins - Degrés
Soient un graphe G = (X, u) et un couple (x, y) ∈ U. y est alors appelé un
successeur de x, et x un prédécesseur de y. On note :
• Γ
+
(x) l’ensemble des successeurs de x
• Γ

(y) l’ensemble des prédécesseurs de y
Γ(x) = Γ
+
(x) ∪ Γ

(x) représente les voisins de x, ou encore les sommets
adjacents à x. Dans le graphe de la figure précédente, Γ
+
(A) = {E, D, B} et
Γ
+
(A) = 0.
1.2. GRAPHES 9
E
F
D
B
C
A
Figure 1.5: Exemple de multigraphe
Remarque : (X, Γ
+
) suffit à définir complètement le graphe... Γ
+
= ∪
x∈X
Γ
+
(x)
Le demi-degré extérieur d’un sommet x, noté d
+
(x), est le nombre d’arcs issus
de x, c’est-à-dire que d
+
(x) = |Γ
+
(x)|. De la même façon, on définit le demi-
degré intérieur, noté d

(x), comme étant le nombre d’arcs incidents à x, c’est-
à-dire que d

(x) = |Γ

(x)|. Le degré d’un sommet est alors la somme de ses
demi-degrés intérieur et extérieur.
On dit qu’un graphe est complet si et seulement si ∀x, y ∈ X alors (x, y) ∈ U,
c’est-à-dire si et seulement si tous les sommets sont reliés deux à deux (dans les
deux sens). Dans le cas d’un graphe complet à n sommets, tous les demi-degrés
intérieurs et extérieurs sont égaux à n −1.
1.2.3 Sous-graphes, graphes partiels
Définition 1.2.2 On appelle sous-graphe de G = (X, U) le graphe G

= (X

, U
X
′ )
engendré par un ensemble de sommets X

⊂ X où U
X
′ représente les arcs de U
ayant leur origine et leur extrémité dans X

.
Définition 1.2.3 De la même manière on appelle graphe partiel de G = (X, U)
engendré par U

, le graphe G

= (X, U

) où U

⊂ U, c’est-à-dire qu’on conserve
tous les sommets mais qu’on supprime certains arcs.
Les deux graphes de la figure 1.6 représentent respectivement le graphe partiel
de l’exemple de la figure 1.4 engendré par les sommets {A, D, E, F} et le sous-
graphe de ce même exemple dans lequel on a supprimé les arcs (E, D) et (D, E)
et (E, F).
1.2.4 Graphes non-orientés
Pour étudier certaines propriétés d’un graphe, on n’a pas toujours besoin de faire
référence à l’orientation, par exemple si on veut seulement savoir si deux sommets
10 CHAPITRE 1. ELÉMENTS DE THÉORIE DES GRAPHES
E
F
D
A
E
F
D
B
C
A
Figure 1.6: Exemple de sous-graphe et de graphe partiel
sont reliés ou non. Dans ce cas, on considère des arêtes (x, y) et non plus des arcs
(x, y). Les notions de voisins et de degrés subsistent bien entendu. La figure 1.7
présente un exemple de graphe non-orienté.
Théorème 1.2.1 Soit G = (X, E) un graphe non-orienté. Le nombre de sommets
de degré impair est pair.
Démonstration
F
B
A
D
E C
Figure 1.7: Exemple de graphe non orienté
Définition 1.2.4 G
1
= (X
1
, U
1
) et G
2
= (X
2
, U
2
) sont dits isomorphes si et
seulement si il existe une bijection f : X
1
−→ X
2
telle que (x, y) ∈ U
1
⇐⇒
(f(x), f(y)) ∈ U
2
.
Le problème de décider si deux graphes sont isomorphes est un problème al-
gorithmiquement difficile.
1.3 Chemins, chaînes, cycles
Définition 1.3.1 On appelle chemin d’un graphe G = (X, U) toute suite d’arcs
µ = (u
1
, ..., u
p
) vérifiant ∀i < p, l’extrémité de u
i
est l’origine de u
i+1
. Si, en
plus, l’extrémité de u
p
est égale à l’origine de u
1
, µ est un circuit.
1.3. CHEMINS, CHAÎNES, CYCLES 11
Dans le graphe de la figure 1.8, ((A, E), (E, D)) est un chemin et (E, F), (F, D)(D, E)
est un circuit. Naturellement, (E, F), (F, D)(D, E) est aussi un chemin. Dans les
graphes non-orientés, on définit de manière analogue les chaînes et les cycles.
E
F
D
B
C
A
Figure 1.8: Exemple de chemin et de circuit
Le nombre d’arcs constitue la longueur de la chaîne ou du chemin. Si le chemin
passe une seule fois par chaque arc, il est dit simple, s’il passe une seule fois par
chaque sommet, il est dit élémentaire.
Définition 1.3.2 G = (X, U) est connexe si et seulement si ∀x, y ∈ X il existe
une chaîne de x à y.
Propriété 1.3.0.1 La relation R définie par xRy si et seulement si il existe une
chaîne de x à y est :
• réflexive
• symétrique
• transitive
Démonstration
C’est donc une relation d’équivalence dont les classes sont appelées les com-
posantes connexes de G.
Définition 1.3.3 G = (X, U) est dit fortement connexe si et seulement si ∀x, y ∈
X il existe un chemin de x à y et un chemin de y à x.
Propriété 1.3.0.2 La relation R

définie par xR

y si et seulement si il existe un
chemin de x à y et un chemin de y à x est :
• réflexive
• symétrique
12 CHAPITRE 1. ELÉMENTS DE THÉORIE DES GRAPHES
• transitive
Démonstration
C’est donc une relation d’équivalence dont les classes sont appelées les com-
posantes fortement connexes de G.
La figure 1.9 propose un exemple de graphe sur lequel sont représentées ses
composantes fortement connexes. Sur ce graphe, il n’y a par contre qu’une seule
composante connexe, composée de tous les sommets.
Propriété 1.3.0.3 Un graphe fortement connexe est connexe, mais la réciproque
est fausse (voir figure 1.9).
A
C
D
B
Figure 1.9: Exemple de graphe connexe mais pas fortement connexe
Définition 1.3.4 G = (X, U) est un graphe k-connexe si et seulement si ∀A ⊂ X
avec |A| < k, le sous-graphe engendré par X \ A est connexe. La connectivité de
G est alors le plus grand k tel que G soit k-connexe, noté K(G).
On peut voir la k-connectivité comme le nombre minimum de sommets qu’il
faut enlever pour disconnecter le graphe. On remarque que K(G) ≤ min
x∈X
|Γ(x)| =
δ. En effet, si on enlève les δ voisins du x qui réalise δ, x n’est plus connecté au
reste du graphe.
Théorème 1.3.1 (Menger) G est k-connexe si et seulement si ∀(x, y) ∈ X
2
il
existe k chaînes élémentaires disjointes 2 à 2 intérieurement (sommets) qui relient
x et y.
Corollaire 1.3.0.1 Si G k-connexe, x ∈ X, A ⊂ X avec |A| ≥ k, alors il existe k
chaînes élémentaires disjointes 2 à 2 de x à A.
1.4. COMPOSANTESFORTEMENTCONNEXES- FERMETURETRANSITIVE13
1.4 Composantes fortement connexes - fermeture transi-
tive
1.4.1 Composantes fortement connexes
Soit G = (X, U) un graphe. L’algorithme suivant calcule la composante fortement
connexe associée au sommet x
0
∈ X.
marquer le sommet x
0
avec ⊕ et ⊖
Répéter
marquer avec ⊕ tout successeur non marqué ⊕ d’un sommet ⊕
marquer avec ⊖ tout prédécesseur non marqué ⊖ d’un sommet ⊖
jusqu’à ce qu’il n’y ait plus de marquage possible
Les sommets marqués ⊕ et ⊖ forment la composante fortement connexe de
x
0
. On peut trouver toutes les composantes fortement connexes en réappliquant
l’algorithme à tous les sommets n’appartenant pas encore à une composante forte-
ment connexe.
1.4.2 Fermeture transitive
Définition 1.4.1 La fermeture transitive du graphe G = (X, U) est le graphe
τ(G) = (X, τ(U)) où (x, y) ∈ τ(U) si et seulement si il existe un chemin de
x vers y dans G.
Si G est fortement connexe, sa fermeture transitive est le graphe complet.
Figure 1.10: Exemple de graphe avec sa fermeture transitive
Définition 1.4.2 Deux graphes G
1
et G
2
sont dits τ-équivalents si et seulement si
ils ont même fermeture transitive.
On vérifie facilement que la relation de τ-équivalence est une relation d’équivalence.
14 CHAPITRE 1. ELÉMENTS DE THÉORIE DES GRAPHES
Définition 1.4.3 On dit que G = (X, U) est τ-minimal si et seulement si ∀u ∈ U,
τ(G) = τ(G\ {u}).
Pour un graphe donné, il n’existe pas a priori de graphe τ-minimal unique.
Théorème 1.4.1 Si G est un graphe sans circuits, alors le graphe τ-minimal est
unique.
1.4.3 Graphes fortement connexes
Lorsque qu’un graphe G est fortement connexe, la matrice d’adjacence de sa fer-
meture transitive ne comporte que des 1, en dehors de la diagonale.
Théorème 1.4.2 G = (X, U) fortement connexe ⇐⇒∀A ⊂ X, A = 0 et A = X,
Γ
+
(A) = A.
Démonstration
Chapitre 2
Ensembles particuliers dans les
graphes
2.1 Nombre de stabilité
Définition 2.1.1 Soit G = (X, U) un graphe non orienté. Un sous-ensemble S ⊂
X est dit stable si et seulement si 2 sommets distincts de S ne sont jamais reliés
(adjacents), c’est-à-dire si ∀x ∈ S, Γ(x)
¸
S = 0.
Figure 2.1: Exemple de stables dans un graphe
Soit S la famille des ensembles stables de G. On a évidemment 0 ∈ S et pour
tout S ∈ S avec A ⊂ S, alors A ∈ S.
Définition 2.1.2 S
0
est un stable maximal si et seulement si ∀S
1
∈ S et S
1
= S
0
alors S
0
⊂S
1
.
Définition 2.1.3 On appelle nombre de stabilité de G = (X, U), l’entier défini
par α(G) = max
S∈S
|S|.
Un ensemble stable S ⊂ X qui vérifie |S| = α(G) sera dit stable maximum.
Il n’y a pas forcément unicité...
15
16 CHAPITRE 2. ENSEMBLES PARTICULIERS DANS LES GRAPHES
Les ensembles stables trouvent leur application dans le problème des huit reines.
Il s’agit de placer huit reines sur un échiquier sans qu’elles puissent être deux à
deux en prise (même rangée, même colonne ou même diagonale). On construit
alors un graphe à 64 sommets correspondant aux 64 cases de l’échiquier et on relie
les cases qui se trouvent sur la même ligne, la même colonne ou la même diag-
onale. Le problème des huit reines se ramène alors à l’existence d’un stable à 8
sommets. Celui-ci n’est d’ailleurs pas unique.
Il n’existe pas d’algorithme polynomial pour résoudre les problèmes de con-
struction d’ensemble stable (le nombre d’étapes ne peut pas être borné par O(n
p
)).
2.2 Nombre d’absorption
Définition 2.2.1 Soit un graphe G = (X, U). Un ensemble A ⊂ X est absorbant
si et seulement si ∀x / ∈ A, Γ
+
(x)
¸
A = 0.
On appelle A la famille des ensembles absorbants de A. Si A ∈ A et A ⊂ A

,
alors A

∈ A.
Symétriquement à la notion de stable maximal et maximum, on peut définir un
absorbant minimal et un absorbant minimum (non unique). Le nombre d’absorption,
noté β(G) est bien sûr le cardinal du plus petit absorbant.
2.3 Noyau - fonctions de Grundy
2.3.1 Définitions
Définition 2.3.1 Soit un graphe G = (X, U). Un ensemble A ⊂ X est un noyau
si il est à la fois stable et absorbant.
Il existe des graphes sans noyaux, ainsi que des graphes à plusieurs noyaux.
Théorème 2.3.1 Un noyau est un stable maximal et un absorbant minimal.
Théorème 2.3.2 Un graphe simple, sans circuits, admet un noyau. Ce noyau est
unique.
Définition 2.3.2 Soit un graphe G = (X, U) un graphe simple sans boucles. Une
fonction f : X −→ N est une fonction de Grundy si et seulement si pour tout
sommet x, g(x) est le plus petit entier positif ou nul qui n’apparaît pas dans
{g(y), y ∈ Γ
+
(x)}.
Là encore, il n’y a pas forcément existence ou unicité. Si Gadmet une fonction
de Grundy, il admet un noyau dont les sommets sont les 0 de la fonction de Grundy.
2.4. NOMBRE CHROMATIQUE 17
x
1
x
2
x
3
x
4
x
5
x
6
x
7
x
8
x
1
0 0 1 0 0 0 0 0
x
2
1 0 1 1 1 1 1 1
x
3
0 0 0 1 1 0 0 0
x
4
0 0 0 0 1 0 1 0
x
5
0 0 0 0 0 0 1 1
x
6
1 0 1 0 0 0 0 0
x
7
0 0 0 0 0 0 0 1
x
8
0 0 0 0 0 0 0 0
2.3.2 Exemple de calcul de fonction de Grundy
On cherche à calculer la fonction de Grundy du graphe défini par la matrice d’adjacence
suivante :
On commence par choisir g(x
8
), x
8
est le seul sommet qui n’ait pas de suc-
cesseur. il n’y a donc pas de contraintes sur g(x
8
). On lui donne alors la valeur
0. De la même façon, x
7
a un seul successeur, x
8
. Pour construire la fonction
de Grundy, on construit le tableau suivant qui contient les successeurs de chacun
des sommets et la valeur de la fonction de Grundy pour ceux-ci et la valeur de la
fonction de Grundy de chacun des sommets. Dès que la valeur de la fonction de
Grundy est définie pour tous les successeurs d’un sommet, on peut définir celle du
sommet considéré.
Γ(x
i
) g(Γ(x
i
)) g(x
i
)
x
1
x
3
1 0
x
2
x
1
, x
3
, x
4
, x
5
, x
6
, x
7
, x
8
0, 1, 2 3
x
3
x
4
, x
5
0, 2 1
x
4
x
5
, x
7
2, 1 0
x
5
x
7
, x
8
0, 1 2
x
6
x
4
, x
3
1, 0 2
x
7
x
8
0 1
x
8
0
Table 2.1: Calcul de la fonction de Grundy
2.4 Nombre chromatique
Définition 2.4.1 Une k-coloration des sommets est une partition en k stables (S
1
, ..., S
k
)
de l’ensemble X des sommets (à un stable correspond une couleur).
Définition 2.4.2 Le nombre chromatique de G = (X, U) est le plus petit nombre
18 CHAPITRE 2. ENSEMBLES PARTICULIERS DANS LES GRAPHES
de couleurs nécessaire pour colorier Gde sorte que 2 sommets adjacents soient de
couleur différente. On le note χ(G).
Le problème le plus courant est celui dit des 4 couleurs: peut-on colorier toute
carte de géographie avec 4 couleurs seulement de sorte que deux régions de la
carte qui ont une frontière commune soient de couleur différente ? chaque région
est représentée par un sommet, les arcs rendant compte de l’existence d’une fron-
tière commune. On a alors un graphe planaire (les arêtes ne se coupent pas), et la
réponse est oui.
Théorème 2.4.1 G planaire =⇒χ(G) ≤ 4
Chapitre 3
Familles de graphes possédant
des propriétés particulières
3.1 Graphes planaires
Définition 3.1.1 Un graphe est planaire s’il est possible de le représenter sur un
plan sans que deux de ses arcs ne se rencontrent en dehors de leurs extrémités.
Figure 3.1: Exemple de graphes planaires
Définition 3.1.2 On appelle face toute région du plan limitée par des arêtes telle
que deux points arbitraires peuvent être reliés par un trait continu ne rencontrant
ni sommet ni arêtes. On appelle alors frontière de la face l’ensemble des arêtes
incidentes à celle-ci. Deux faces sont adjacentes si et seulement si elles ont une
arête commune.
Il y a toujours une face illimitée...
Théorème 3.1.1 (formule d’Euler) G planaire connexe possédant n sommets, m
arcs et f faces. Alors f = m−n + 2.
On rappelle qu’un graphe planaire est 4-colorable.
19
20CHAPITRE3. FAMILLES DEGRAPHESPOSSÉDANTDES PROPRIÉTÉSPARTICULIÈRES
3.2 Graphes hamiltoniens et eulériens
3.2.1 Graphes hamiltoniens
Définition 3.2.1 Soit G = (X, U) un graphe simple, connexe, sans boucles à n
sommets. On appelle cycle hamiltonien de G un cycle élémentaire à n sommets
(passant une et une seule fois par chaque sommet).
Définition 3.2.2 Un graphe qui admet au moins un cycle hamiltonien est appelé
graphe hamiltonien.
Le graphe complet est hamiltonien.
Théorème 3.2.1 Si G est hamiltonien, G est 2-connexe.
La réciproque est fausse. Il est algorithmiquement difficile de déterminer un
cycle hamiltonien dans un graphe. On dispose par contre d’un certain nombre de
conditions suffisantes.
Théorème 3.2.2 (Dirac) Soit G = (X, U) un graphe à n sommets. Si ∀x ∈ X
d(x) ≥
n
2
, alors G admet un cycle hamiltonien.
C’est un cas particulier du théorème suivant.
Théorème 3.2.3 (Ore) Soit G = (X, U) un graphe à n sommets. Si ∀x, y ∈ X
tels que (x, y) / ∈ U, d(x) +d(y) ≥ n, alors G est hamiltonien.
Ce sont deux corollaires d’un théorème plus général, le théorème de Bondy-
Chùatal.
Définition 3.2.3 Soit G un graphe à n sommets, k ≤ n un entier, on appelle k-
fermeture de G le plus petit graphe H à n sommets contenant G tel que si x et y
ne sont pas adjacents dans H, d
H
(x) +d
H
(y) < k.
On obtient cette k-fermeture en reliant récursivement les paires de sommets
dont la somme des degrés est supérieure ou égale à k.
Théorème 3.2.4 (Bondy-Chùatal) Soit G = (X, U) un graphe à n sommets, G la
n-fermeture de G. G est hamiltonien si et seulement si G est hamiltonien.
On peut définir la notion de chaîne hamiltonienne dans un graphe non-orienté.
3.2. GRAPHES HAMILTONIENS ET EULÉRIENS 21
3.2.2 Graphes eulériens
Définition 3.2.4 On appelle cycle (resp. chaîne) eulérien un cycle (resp. chaîne)
qui passe par toutes les arêtes une et une seule fois.
Définition 3.2.5 On appelle graphe eulérien, un graphe qui admet au moins un
cycle eulérien.
Ce cycle n’est pas forcément élémentaire. L’exemple courant est celui dit des
«7 ponts du Königsberg» représenté figure 3.2. La question est de déterminer si un
piéton peut faire une promenade en traversant une et une seule fois tous les ponts.
Ce problème revient à déterminer si il existe un cycle eulérien dans le graphe dont
les sommets sont les îlots et les arcs les ponts.
a
b
d
c
Figure 3.2: Le problème des 7 ponts du Königsberg
Théorème 3.2.5 Un multigraphe connexe G admet un cycle eulérien si et seule-
ment si ses sommets sont de degré pair.
On peut donc répondre par la négative au problème des 7 ponts du Königsberg.
22CHAPITRE3. FAMILLES DEGRAPHESPOSSÉDANTDES PROPRIÉTÉSPARTICULIÈRES
Chapitre 4
Algorithmique des graphes
L’objectif de ce chapitre est d’introduire l’algorithmique des graphes, c’est-à-dire
les principaux algorithmes que l’on utilise avec es graphes en pratique : le plus
court chemin, les flots dans les graphes... On commencera par aborder les prob-
lèmes de représentation des graphes en mémoire.
4.1 Représentation en mémoire
4.1.1 Matrice d’adjacence
Soit un graphe G = (X, U), composé de n sommets x
1
, ..., x
n
. Ces sommets
vont nous servir à composer une matrice booléenne carrée A = (a
ij
)
1≤i,j≤n
définie
par
∀1 ≤ i, j ≤ n, a
ij
=

1 si (x
i
, x
j
) ∈ U
0 sinon
(4.1)
E
F
D
B
C
A
Figure 4.1: Exemple de graphe
23
24 CHAPITRE 4. ALGORITHMIQUE DES GRAPHES
Dans le graphe de la figure 4.1, la matrice d’adjacence s’écrit donc ainsi :
A =

¸
¸
¸
¸
¸
¸
¸
0 1 0 1 1 0
0 0 1 0 0 0
0 1 0 1 0 0
0 0 0 0 1 0
0 0 0 1 0 1
0 0 0 1 0 0
¸

(4.2)
Si le graphe considéré est non-orienté (ou symétrique), on se contentera d’une
matrice triangulaire supérieure. On remarque par ailleurs que la complexité spa-
tiale de cette représentation est en O(n
2
).
4.1.2 Tableaux d’arcs
Une alternative à cette représentation lorsque le nombre de sommets est impor-
tant par rapport au nombre d’arcs consiste à créer deux vecteurs contenant chacun
l’origine et l’extrémité des arcs. Ainsi la matrice précédente se réécrirait ainsi :
TA =
¸
A A A B C C D E E F
B D E C B D F D F D

(4.3)
La complexité spatiale est cette fois en O(m) où m est le nombre d’arcs. A
moins de choisir une convention d’ordre, cette représentation n’est pas unique...
4.1.3 Tableaux de successeurs
Il s’agit cette fois de construire deux tableaux :
• Le premier tableau contient successivement les successeurs du premier som-
met, du second sommet...
• Le second tableau contient la place dans la liste ci-dessus du premier suc-
cesseur de chaque sommet.
T
1
=

B D E C B D F D F D

(4.4)
T
2
=

1 4 5 7 8 10

(4.5)
La complexité spatiale de cette représentation est alors de O(n +m).
4.1.4 Listes chaînées
Les représentations précédentes sont faciles à mettre en œuvre mais sont mal adap-
tées aux transformations élémentaires des graphes comme ajouter ou supprimer des
sommets et des arcs. On utilise souvent des listes chaînées de pointeurs associées
à chaque sommet.
4.2. PARCOURS DE GRAPHES 25
4.2 Parcours de graphes
La plupart des algortithmes de graphes utilisent des notions de parcours de graphes
c’est-à-dire qu’ils vont effectuer un traitement sur l’ensemble des sommets ou des
arcs d’un graphe. Evidemment dans un certain nombre de cas, l’ordre de parcours
des sommets ou des arcs n’est pas innocent sur le résultat. Les algorithmes de
parcours dépendront aussi naturellement de la structure de données adoptée. Dans
les paragraphes qui suivent, nous nous intéresserons d’abord au parcours des arbres
que nous généraliserons ensuite aux algorithmes de parcours d’abres.
4.2.1 Parcours des arbres
Il existe deux idées principales pour le parcours des sommets d’un arbre : le par-
cours en largeur d’abord (breadth-first)et le parcours en profondeur d’abord (depth-
first).
Dans le cas du parcours en largeur d’abord, le principe est de visiter les som-
mets dans l’ordre de gauche à droite puis de haut en bas comme le montre la fig-
ure 4.2 ; les sommets sont visités dans l’ordre suivant : A, B, C, D, E, F, G, H,
I.
A
B C D
E F G H I
Figure 4.2: Parcours en largeur d’abord
Inversement, dans le parcours en profondeur d’abord, on visite la racine, puis
son premier fils, puis le fils de ce fils etc. La visite est terminée lorsqu’on a visité
tous les successeurs d’un sommet. La figure 4.3 illustre ce mécanisme.
A
B C D
E F G H I
Figure 4.3: Parcours en largeur d’abord
26 CHAPITRE 4. ALGORITHMIQUE DES GRAPHES
4.3 Algorithmes de plus court chemin
Les algorithmes de plus court chemin ont un objectif assez explicite : étant don-
née une fonction de coût (une distance pour commencer) associé à chaque arc,
déterminer le plus court chemin entre deux sommets. Etant donné un graphe
G = (X, U), on associe à chaque arc (x, y) ∈ U une fonction de coût c(x, y)
à valeurs réelles. Le problème de plus court chemin entre deux sommets a et b de
X consiste donc à déterminer le chemin C = (x
1
, ..., x
k
) avec x
1
= a et x
k
= b
qui minimise la somme des c(x
i
, x
i+1
) pour 0 ≤ i < k.
Il existe trois algorithmes à vocation assez générale, même si ce domaine fait
toujours l’objet de recherches actives dans la communauté informatique. En ef-
fet, la complexité des algorithmes les rend peu utilisables si l’on s’intéresse à des
calculs de plus courts chemins prenant en compte l’ensemble des routes françaises
pour déterminer le meilleur chemin entre Landivisiau et Aubagne !
4.3.1 Algorithme de Ford-Bellman
L’algorithme, qui calcule l’ensemble des plus courts chemins d’un sommet s au
reste du graphe, comprend une étape d’initialisation et une boucle. La première
étape d’initialisation établit un ensemble S = {s} des sommets déjà traités, une
fonction de distance π et un ensemble A du meilleur prédécesseur pour venir de
l’origine.
S = {s}, π(s) = 0, A(s) = ǫ
TantQue ∃x / ∈ S avec Γ
−1
(x) ⊂ S Faire
π(x) = min
y∈Γ
−1
(x)
[π(x) +c(x, y)]
Soit ˜ y un sommet tel que π(x) = π(˜ y) +c(˜ y, x)
A(x) = ˜ y et S = S ∪ {x}
finTantQue
1
2
3
6
5
7 4
3
2
-
2
2
2
-
1
5
3
2
3
4
2
Figure 4.4: Exemple de graphe
Nous allons calculer le plus court chemin entre 1 et 7. Le tableau 4.1 représente
les différentes itérations de l’algorithme de Ford-Bellman.
4.3. ALGORITHMES DE PLUS COURT CHEMIN 27
ǫ 1 2 2 3 2,5 5
1 2 3 4 5 6 7
0
0 3
0 3 1
0 3 1 5
0 3 1 5 3
0 3 1 5 3 5
0 3 1 5 3 5 7
Table 4.1: Tableau des itérations de l’algorithme
Une fois l’algorithme arrivé à son terme, on retrouve le chemin optimal dans
A en partant de la fin. Le sommet 7 a pour meilleur prédécesseur 5, qui a lui-
même comme prédécesseur 3... Le chemin optimal est donc le chemin 1-2-3-5-7
de longueur 7.
4.3.2 Algorithme de Moore ou de Dijkstra
L’algorithme suivant dû à Moore (1957), a été redémontré par Dijkstra en 1959.
Il est basé sur une hypothèse restrictive par rapport à l’algorithme précédent : la
fonction de coût est positive.
π(s) = 0, ∀x = s, π(s, x) = c(s, x) si l’arc (s, x) existe et +∞ sinon
P = {s}, T = X −{s}, A(s) = ǫ
TantQue T = 0 Faire
Soit x
0
∈ T tel que π(x
0
) = min
x∈T
π(x)
T = T −{x
0
}
P = P ∪ {x
0
}
PourTout x ∈ T Faire
Si π(x) > π(x
0
) +c(x
0
, x) Alors
π(x) = π(x
0
) +c(x
0
, x)
A(x) = x
0
FinSi
FinPour
finTantQue
Nous nous intéressons en guise d’exemple au graphe de la figure 4.5 où nous
cherchons le chemin de longueur minimale de x
1
à x
6
.
Le tableau 4.2 représente l’étape d’initialisation de l’algorithme.
A la première itération, on sélectionne la valeur la moins élevée (le 3 associé
à x
2
ici) et on exécute le contenu de l’algorithme. Cela nous mène au second
28 CHAPITRE 4. ALGORITHMIQUE DES GRAPHES
1
2
3
5
6
4
3
6
3
2
5
1
1
6
6
3
Figure 4.5: Exemple de graphe
A ǫ x
1
x
1
x
1
x
1
x
2
x
3
x
4
x
5
x
6
init. 0 3 6 +∞ 3 +∞
Table 4.2: Initialisation de l’algorithme de Dijkstra
tableau 4.3 où seule la valeur temporaire du plus court de chemin menant à x
4
a
été modifiée : en passant par x
2
, on peut rejoindre x
4
avec un coût de 9.
A ǫ x
1
x
1
x
2
x
1
x
1
x
2
x
3
x
4
x
5
x
6
init. 0 3 6 +∞ 3 +∞
0 3 6 9 3 +∞
Table 4.3: Première itération de l’algorithme de Disjkstra
Le tableau 4.4 présente les autres itérations de l’algorithme.
4.3.3 Algorithmes de Bellmann
On s’intéresse maintenant à des algorithmes un petit peu moins restrictifs : plutôt
de considérer des graphes à fonction de coût positives, on considère des graphes
sans circuits absorbants. Un circuit absorbant est un circuit dont le coût total est
négatif. Dès lors, n’importe quel chemin empruntant ce circuit une infinité de fois
aura un coût infiniment petit.
On présente tout d’abord la version standard de l’algorithme de Bellman.
π
1
(s) = 0
4.3. ALGORITHMES DE PLUS COURT CHEMIN 29
A ǫ x
1
x
5
x
3
x
1
x
5
,x
4
x
1
x
2
x
3
x
4
x
5
x
6
init. 0 3 6 +∞ 3 +∞
0 3 6 9 3 +∞
0 3 5 9 3 8
0 3 5 6 3 8
0 3 5 6 3 7
Table 4.4: Autres étapes de l’algorithme de Disjkstra
π
1
(x) = c(s, x), ∀x = s
Pour m = 1 à n −2 Faire
π
m+1
(x) = min
x=s

m
(x), min
y=x

m
(y) +c(y, x)]]
FinPour
A la fin de l’algorithme, π
m−1
(x) contient la valeur du chemin optimal de s à
x.
1
2
3
5
6
4
3
6
3
-
2
5
1
1
6
6
-
3
Figure 4.6: Exemple de graphe
L’application de l’algorithme sur le graphe de la figure 4.6 se traduit dans le
tableau 4.5.
La validité de l’algorithme se montre de la façon suivante : on veut montrer que
π
m
(x) est la valeur du chemin optimal de s à x comportant au plus m arcs. On va
chercher à montrer (récurrence) que cette propriété reste vraie pour π
m+1
(x). On
considère donc un chemin de valeur minimale de s à x comportant au plus m + 1
arcs :
• s’il ne contient pas plus de m arcs, sa valeur est bien π
m
(x) ;
30 CHAPITRE 4. ALGORITHMIQUE DES GRAPHES
x
1
x
2
x
3
x
4
x
5
x
6
π
1
0 3 6 +∞ 3 +∞
π
2
0 3 0 7 3 8
π
3
0 3 0 1 3 8
π
4
0 3 0 1 3 2
π
5
0 3 0 1 3 2
Table 4.5: Fonctionnement de l’algorithme de Bellman
• s’il en contient m + 1, sa valeur est π
m
(x
k
) + c(x
k
, x) qui est bien égale à
min
y=x

m
(y) +c(y, x)].
Donc on a bien
π
m+1
(x) = min
¸
π
m
(x), min
y=x

m
(y) +c(y, x)]

(4.6)
qui est la valeur du chemin optimal de s à x comportant au plus m+ 1 arcs.
Si l’on cherche tous les plus courts chemins entre deux quelconques des som-
mets du graphe, on aboutit à des algorithmes en O(n
4
). L’algorithme matriciel
développé dans ce paragraphe est une reprise de l’algorithme de Roy-Warshall
développé pour la détermination de la fermeture transitive. Il s’initialise ainsi :
Π
(0)
ij
=

valeur de l’arc s’il existe
0 si i = j
+∞sinon
(4.7)
L’algorithme est alors le suivant :
Pour m de 1 à n Faire
Pour i de 1 à n Faire
Pour j de 1 à n Faire
Π
(m)
ij
= min{Π
(m−1)
ij
, Π
(m−1)
im
+ Π
(m−1)
mj
}
FinPour
FinPour
FinPour
Π
(m)
ij
représente la longueur du chemin optimal de i à j dont les sommets
intermédiaires appartiennent à {1, ..., m}.
Nous disposons ainsi d’un algorithme en O(n
3
) qui donne la longueur des
chemins optimaux entre deux sommets quelconques du graphe.
L’application de l’algorithme sur le graphe de la figure 4.6 se traduit dans les
matrices suivantes.
4.4. PROBLÈME DU FLOT MAXIMAL 31
1
2
3
4
5
1
1
2
4
1
3
1
Figure 4.7: Exemple de graphe
A =

¸
¸
¸
¸
¸
0 1 2 +∞ +∞
+∞ 0 1 4 +∞
+∞ +∞ 0 1 3
+∞ +∞ +∞ 0 1
+∞ +∞ +∞ +∞ 0
¸

(4.8)
A
2
=

¸
¸
¸
¸
¸
0 1 2 3 5
+∞ 0 1 2 4
+∞ +∞ 0 1 2
+∞ +∞ +∞ 0 1
+∞ +∞ +∞ +∞ 0
¸

(4.9)
A
3
=

¸
¸
¸
¸
¸
0 1 2 3 5
+∞ 0 1 2 3
+∞ +∞ 0 1 2
+∞ +∞ +∞ 0 1
+∞ +∞ +∞ +∞ 0
¸

(4.10)
4.4 Problème du flot maximal
4.4.1 Définitions
On s’intéresse maintenant à faire circuler des quantités dans un graphe et à max-
imiser la quantité circulant entre 2 ou plusieurs arcs de ce graphe. Les applications
sont immédiates : il peut s’agir de transporter le maximum de monde entre deux
points de l’espace en utilisant plusieurs routes mais aussi d’acheminer des fluides
via des canalisations
1
ou des informations dans un réseau. Le paragraphe suivant
s’intéressera au même problème mais en visant à minimiser le coût de ce transport.
1
La cas des canalisations est particulier puisqu’en plus d’avoir une capacité maximale, les canal-
isations peuvent nécessiter une capacité minimale, par exemple une pression de gaz minimale.
32 CHAPITRE 4. ALGORITHMIQUE DES GRAPHES
Définition 4.4.1 Soit un graphe G = (X, U). On appelle capacité c
ij
associée à
l’arc (i, j) un réel positif ou nul représentant la quantité maximale pouvant circuler
sur un arc. On appelle flot x
ij
sur l’arc (i, j) le réel représentant la quantité
circulant réellement sur l’arc, en vérifiant la contrainte 0 ≤ x
ij
≤ c
ij
. On appelle
flot sur G l’ensemble des flots associés à chaque arc du graphe G.
Pour être valide (on dira admissible), le flot dans un graphe doit vérifier une loi
de conservation simple définie par analogie avec la loi de Kirchhoff en électricité
: tout flot entrant dans un nœud doit en ressortir. Elle est valable en tout nœud
d’un graphe sauf dans deux nœuds particuliers s et t qu’on appellera respective-
ment source et puits du graphe. Au niveau de la source, il y a création de flot,
tandis qu’au niveau du puits il y a absorption. Sur les autres nœuds i, la loi de
conservation s’écrit ainsi :
¸
j∈Γ

(i)
x
ij
=
¸
k∈Γ
+
(i)
x
ik
(4.11)
On représente un graphe avec le flot et la capacité associés comme sur la fig-
ure 4.8.
s
1
2
3
4
t
1
[3
]
2

[
2
]
1 [2]
0

[
1
]
0

[
1
]
1

[
1
]
2 [2]
1

[
2
]
2

[
3
]
Figure 4.8: Représentation d’un flot dans un graphe
Pour vérifier la loi de conservation de façon générale, on va ajouter un arc de
retour fictif entre t et s et on appellera valeur du flot la quantité circulant sur l’arc
(t, s), comme le montre la figure 4.9.
Dès lors, on peut définir le problème de flot maximal comme étant la maximisa-
tion de x
ts
sous les contraintes de respect des capacités et de la loi de conservation.
On remarquera qu’il s’agit d’une forme particulière de programme linéaire.
4.4.2 Résolution du problème de flot maximal
Définition 4.4.2 On définit une chaîne augmentante u de s à t pour un flot admis-
sible donné comme une chaîne de s à t respectant les contraintes suivantes :
• x
ij
< c
ij
pour tout arc dirigé de s vers t
4.4. PROBLÈME DU FLOT MAXIMAL 33
s
1
2
3
4
t
1
[3
]
2

[
2
]
1 [2]
0

[
1
]
0

[
1
]
1

[
1
]
2 [2]
1

[
2
]
2

[
3
]
3
Figure 4.9: Représentation d’un flot dans un graphe avec un arc de retour fictif
• x
ij
> 0 pour tout arc dirigé de t vers s
La chaîne µ définie sur la figure 4.10 est une chaîne augmentante de l’exemple
de graphe précédent. On appelle µ
+
l’ensemble des arcs de µ dans le sens de s
vers t, µ

ceux qui sont dans l’autre sens.
s
1 3
4
t
1
[3
]
1 [2]
1

[
1
]
1

[
2
]
Figure 4.10: Exemple de chaîne augmentante
Le flot peut alors être augmenté du flot circulant sur la chaîne augmentante ;
on notera qu’en tenant compte du sens des arcs, la loi de conversation se vérifie sur
l’ensemble des arcs de la chaîne. L’augmentation α du flot correspondante est alors
du minimum des capacités résiduelles (la capacité de l’arc moins le flot circulant
déjà) pour les arcs de s vers t et le minimum des flots circulant effectivement pour
les arcs de t vers s.
α = min
¸
min
(i,j)∈µ
+
(c
ij
−x
ij
), min
(i,j)∈µ

x
ij

(4.12)
Pour augmenter le flot, on ajoute α au flux des arcs de µ
+
et on retranche α au
flux des arcs de µ

.
34 CHAPITRE 4. ALGORITHMIQUE DES GRAPHES
Définition 4.4.3 On dit que le flot est complet lorsque tout chemin de s à t com-
porte au moins un arc saturé ((i, j) est saturé lorsque x
ij
= c
ij
).
Définition 4.4.4 Une coupe associée à un graphe G = (X, U) est une partition
de X en deux ensembles S et T telle que s ∈ S et t ∈ T. On appelle capacité de
la coupe c(S, T) =
¸
i∈S,j∈T
c
ij
.
Théorème 4.4.1 Un flot x de s à t est maximal s’il n’existe pas de chaîne augmen-
tante de s à t.
On en déduit en corollaire :
Propriété 4.4.2.1 Soit un graphe G = (X, u). Quelle que soit la coupe (S, T),
quel que soit le flot admissible x, alors la valeur du flot x est inférieure ou égale à
la capacité de la coupe (S, T).
Théorème 4.4.2 (Ford-Fulkerson) La valeur du flot maximal est égal à la capacité
de la coupe de capacité minimale.
On en déduit l’algorithme de recherche du flot maximal : il consiste à exhiber
une chaîne augmentante et à augmenter le flot de la valeur de la chaîne augmentante
tant qu’il existe des chaînes augmentantes.
4.4.3 Algorithme de Ford-Fulkerson et exemple
Soit x un flot admissible, marquer + le sommet s
Répéter
Si i est marqué et j non marqué Alors
Si (i, j) est un arc non saturé Alors
marquer j avec +
FinSi
Si (j, i) est un arc tel que x
ij
> 0 Alors
marquer j avec -
FinSi
FinSi
Jusqu’à ce qu’on ne puisse plus marquer de sommets
Si t est marqué Alors
il existe une chaîne augmentante de s à t
augmenter le flot et recommencer
Sinon
le flot est maximal
FinSi
4.4. PROBLÈME DU FLOT MAXIMAL 35
s
A
B
C
D
E
F
t
1
5

[
3
5
]
35 [35]
3
0

[
4
0
]
5 [20]
20 [25]
20 [20]
2
0

[
2
0
]
30 [30]
3
0

[
6
0
]
1
5

[
1
5
]
1
0

[
2
0
]
0

[
5
]
1
0

[
1
0
]
80
Figure 4.11: Flot initial pour l’algorithme de Ford-Fulkerson
s
A
B
C
D
E
F
t
1
5

[
3
5
]
35 [35]
3
0

[
4
0
]
5 [20]
20 [25]
20 [20]
2
0

[
2
0
]
30 [30]
3
0

[
6
0
]
1
5

[
1
5
]
1
0

[
2
0
]
0

[
5
]
1
0

[
1
0
]
+
+s
+A
+B
+C
-D
+s
Figure 4.12: Marquage pour l’algorithme de Ford-Fulkerson
36 CHAPITRE 4. ALGORITHMIQUE DES GRAPHES
Faisons maintenant fonctionner l’algorithme sur un exemple, celui du graphe
de la figure 4.11. On notera que ce graphe comporte un flot initial non nul afin de
réduire le nombre d’itérations de l’algorithme.
Après marquage, le graphe devient celui de la figure 4.12.
A partir des marquages, on retrouve la chaîne augmentante de la figure 4.13.
Elle nous permet d’augmenter le flot de 5, ce qui donne le nouveau flot représenté
figure 4.14.
s
A
B
D
F
t
1
5

[
3
5
]
5 [20]
3
0

[
6
0
]
1
5

[
1
5
]
0

[
5
]
Figure 4.13: Chaîne augmentante
s
A
B
C
D
E
F
t
2
0

[
3
5
]
35 [35]
3
0

[
4
0
]
10 [20]
20 [25]
20 [20]
2
0

[
2
0
]
30 [30]
3
5

[
6
0
]
1
0

[
1
5
]
1
0

[
2
0
]
5

[
5
]
1
0

[
1
0
]
85
Figure 4.14: Nouveau flot après augmentation de 5
Une nouvelle procédure de marquage aboutit au graphe de la figure 4.15. Le
sommet t n’est pas marqué, donc l’algorithme est terminé et le flot est maximal.
4.4. PROBLÈME DU FLOT MAXIMAL 37
La ligne verte sépare les deux ensembles de la coupe de capacité minimale.
s
A
B
C
D
E
F
t
2
0

[
3
5
]
35 [35]
3
0

[
4
0
]
10 [20]
20 [25]
20 [20]
2
0

[
2
0
]
30 [30]
3
5

[
6
0
]
1
0

[
1
5
]
1
0

[
2
0
]
5

[
5
]
1
0

[
1
0
]
85
+
+s +A
-D
+s
+B
Figure 4.15: Fin de l’algorithme
La complexité de l’algorithme se détermine difficilement : la procédure de
marquage nécessite deux examens et est donc en O(m). Le nombre d’itérations
dépend quand à lui largement de la valeur du flot et de la chaîne augmentante
choisie, d’où l’intérêt de ne pas prendre un flot nul au départ. Si on considère
l’exemple de la figure 4.16 qu’on augmente systématiquement en passant par la
branche centrale (dans le bon sens pour les itérations impaires et dans l’autre sens
pour les itérations paires), le nombre d’itérations est alors de 100000 alors qu’en
deux itérations mieux choisies, le flot aurait été maximal.
s
1
t
2
0

[
1
0
0
0
0
0
]
0

[
1
0
0
0
0
0
] 0

[
1
0
0
0
0
0
]
0

[
1
0
0
0
0
0
]
0

[
1
0
0
0
0
0
]
s
1
t
2
1

[
1
0
0
0
0
0
]
0

[
1
0
0
0
0
0
] 1

[
1
0
0
0
0
0
]
0

[
1
0
0
0
0
0
]
1

[
1
0
0
0
0
0
]
s
1
t
2
1

[
1
0
0
0
0
0
]
1

[
1
0
0
0
0
0
] 1

[
1
0
0
0
0
0
]
1

[
1
0
0
0
0
0
]
0

[
1
0
0
0
0
0
]
Figure 4.16: Mauvais choix des chaînes augmentantes
Théorème 4.4.3 Si chaque augmentation de flot est faite suivant une chaîne aug-
mentante de longueur minimale, alors le flot maximal est obtenu après moins de
38 CHAPITRE 4. ALGORITHMIQUE DES GRAPHES
mn
2
itérations, soit une complexité totale en O(m
2
n).
4.5 Flot maximal à coût minimal
4.5.1 Définitions
Nous nous intéressons maintenant au même problème de détermination d’un flot
maximal sauf que nous allons ajouter pour être plus réalistes un coût unitaire sur
chacun des arcs. Il s’agira donc de déterminer le flot maximal à coût minimal. On
considère toujours un graphe G = (X, U) comportant une source s et un puits p
associant à chaque arc (i, j) ∈ U une capacité c
ij
et un flot 0 ≤ x
ij
≤ c
ij
vérifiant
en outre les contraintes de la loi de conservation. On ajoute alors à chaque arc
(i, j) ∈ U un coût unitaire d
ij
.
Le problème du flot maximal à coût minimal consiste donc à parcourir tous les
flots maximaux et à trouver celui qui minimise
¸
(i,j)∈U
x
ij
d
ij
.
Définition 4.5.1 On définit le graphe d’écart G = (X, U
e
) associé à G = (X, U)
vérifiant (i, j) ∈ U
e
si et seulement si :
• (i, j) ∈ U et x
ij
< c
ij
(1)
• (j, i) ∈ U et x
ij
> 0 (2)
Alors la capacité et le coût de (i, j) ∈ U
e
seront respectivement de
• c
ij
−x
ij
et +d
ij
dans le cas (1)
• x
ij
et −d
ij
dans le cas (2)
4.5.2 Algorithme de Roy
L’algorithme que nous allons décrire est dû à Roy, il consiste à partir d’un flot
nul (donc de coût minimal) à augmenter le flot progressivement en conservant la
propriété de coût minimal. D’autres algorithmes (Bennington par exemple) partent
d’un flot maximal dont ils vont chercher à minimiser le coût.
x
0
= (0, ..., 0), k = 0
Construire le graphe d’écart G
e
k
Tantque il existe un chemin de s à t dans G
e
k
k = k+1
Soit µ
k
le plus court chemin de s à t
Soit c la plus petite capacité des arcs de µ
k
Calculer un nouveau flot x
k+1
x
k+1
(i, j) = x
k
(i, j) +c si (i, j) ∈ µ
k
x
k+1
(i, j) = x
k
(i, j) −c si (j, i) ∈ µ
k
x
k+1
(i, j) = x
k
(i, j) sinon
4.5. FLOT MAXIMAL À COÛT MINIMAL 39
on obtient un nouveau flot augmenté de c
FinTantQue
Propriété 4.5.2.1 A chaque étape k de l’algorithme, le flot x
k
est de coût minimal.
4.5.3 Exemple
On considère le graphe de la figure 4.17.
s
a
b
c
d
e
f
t
[4] (3)
[3] (2) [4] (1)
[3] (2)
[5] (2)
[
5
]

(
2
)
[
3
]

(
1
)
[
3
]

(
4
)
[
4
]

(
3
)
[
2
]

(
3
)
[
1
]
(
5
)
Figure 4.17: Exemple et premier graphe d’écart
Compte tenu de la définition vue plus haut, le premier graphe d’écart (construit
à flot nul) est le graphe lui-même. On commence donc par cherche le plus court
chemin entre s et t. On considère donc le chemin (s, b, e, t) dont la capacité mini-
male est 3. On augmente alors le flot de 3 et on construit le second graphe d’écart
de la figure 4.18 où les nouveaux arcs et les modifications sont portées en rouge.
s
a
b
c
d
e
f
t
[1] (3)
[3] (-2)
[1] (1)
[3] (2)
[5] (2)
[
5
]

(
2
)
[
3
]

(
1
)
[
3
]

(
4
)
[
4
]

(
3
)
[
2
]

(
3
)
[
1
]
(
5
)
[3] (-3)
[3] (-1)
Figure 4.18: Second graphe d’écart
40 CHAPITRE 4. ALGORITHMIQUE DES GRAPHES
Le plus court chemin dans ce second graphe d’écart est le chemin (s, c, f, t), sa
capacité minimale est de 3. On peut augmenter le flot de 3 et construire le troisième
graphe d’écart de la figure 4.19 où les nouvelles modifications sont portées en bleu.
Le plus court chemin est cette fois le chemin (s, a, d, t) et on peut encore augmenter
le flot de 3, ce qui nous mène au quatrième graphe d’écart où les modifications sont
portées en vert. Le plus court chemin est alors (s, b, f, t), on peut augmenter le flot
de 1, ce qui donne le cinquième graphe d’écart de la figure 4.21 où les modifications
sont portées en mauve.
s
a
b
c
d
e
f
t
[1] (3)
[3] (-2)
[1] (1)
[3] (2)
[2] (2)
[
5
]

(
2
)
[
3
]

(
-
1
)
[
3
]

(
4
)
[
1
]

(
3
)
[
2
]

(
3
)
[
1
]
(
5
)
[3] (-3)
[3] (-1)
[3] (-2)
[3] (-3)
Figure 4.19: Troisième graphe d’écart
s
a
b
c
d
e
f
t
[1] (3)
[3] (-2)
[1] (1)
[3] (-2)
[2] (2)
[
2
]

(
2
)
[
3
]

(
-
1
)
[
3
]

(
-
4
)
[
1
]

(
3
)
[
2
]

(
3
)
[
1
]
(
5
)
[3] (-3)
[3] (-1)
[3] (-2)
[3] (-3)
[3] (-2)
Figure 4.20: Quatrième graphe d’écart
4.5. FLOT MAXIMAL À COÛT MINIMAL 41
s
a
b
c
d
e
f
t
[4] (-3)
[3] (-2)
[1] (1)
[3] (-2)
[2] (2)
[
2
]

(
2
)
[
3
]

(
-
1
)
[
3
]

(
-
4
)
[
4
]

(
-
3
)
[
1
]

(
3
)
[
1
]
(
5
)
[3] (-1)
[3] (-2)
[3] (-2)
[1] (-3)
Figure 4.21: Cinquième graphe d’écart
42 CHAPITRE 4. ALGORITHMIQUE DES GRAPHES
Chapitre 5
Démonstrations
Démonstration du théorème 1.2.1
Soit a ∈ U une arête de G. Alors, ou a est une boucle autour d’un sommet x
de G et intervient pour 2 dans le degré de x, ou a = (x, y) intervient pour 1 dans
le degré de x et pour 1 dans le degré de y. On a donc
¸
x∈X
d(x) = 2|U| (5.1)
¸
x∈X
d(x) est donc un nombre pair. Si on appelle
˜
X le sous-ensemble de X
tel que les x ∈
˜
X ont un degré impair, alors
¸
x∈X
d(x) = 2|X| =
¸
x∈
˜
X
d(x) +
¸
x∈X−
˜
X
d(x) (5.2)
Le membre de gauche de l’équation est pair, le second terme du nombre de
droite est pair aussi, donc le nombre
¸
x∈
˜
X
d(x) est pair, ce qui est alors néces-
sairement le cas de |
˜
X|.
Démonstration de la propriété 1.3.0.1
R est évidemment réflexive. Soit (u
i
)
1≤i≤n
une chaine de U reliant x à y.
Alors la suite des (u

i
) définie par u

i
= u
n−i
est aussi une chaine de U et constitue
bien une chaine de y à x. R est donc bien symétrique. Enfin, si xRy et yRz, c’est
bien qu’il existe deux suites de U menant respectivement de x à y et de y à z. La
concaténation de ces deux suites fournit une chaine évidente entre x et z, d’où la
transitivité de R. R est donc bien une relation d’équivalence.
Démonstration de la propriété 1.3.0.2
R

est évidemment réflexive et symétrique. Enfin, si xR

y et yR

z, c’est bien
qu’il existe deux suites de U menant respectivement de x à y et de y à z (ainsi que
de y à x et de z à y). La concaténation de ces deux suites fournit un chemin évident
entre x et z (resp. entre z et x), d’où la transitivité de R

. R

est donc bien une
relation d’équivalence.
43
44 CHAPITRE 5. DÉMONSTRATIONS
Démonstration du théorème 1.4.2
=⇒S’il existe A = 0 et A = X tel que Γ
+
(A) = A et un y ∈A, alors il n’y
aura pas de chemin jusqu’à y.
⇐= Soient x et y donnés, on construit A
0
= {x} et la suite des A
i
par la
relation de récurrence suivante : A
i
= A
i−1
∪ Γ
+
(A
i−1
). X étant fini, il existe un
i tel que y ∈ A
i
, ce qui implique qu’il existe un chemin entre x et y.