Vous êtes sur la page 1sur 55

INSTITUT NATIONAL POLYTECHNIQUE DE LORRAINE

Ecole Nationale Superieure dElectricite et de Mecanique

El
ements de Th
eorie des Graphes
Didier Maquin
Version provisoire du 3 mai 2003

Table des mati`


eres
Avant propos

1 Un bref historique de la th
eorie des graphes

2 Introduction
2.1 Quest-ce quun graphe ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Graphes et applications multivoques . . . . . . . . . . . . . . . . . . . . . . . . .
2.3 Principales definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6
6
7
8

3 Modes de repr
esentation dun graphe
3.1 Listes de succession . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Matrice dadjacence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 Matrice dincidence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9
9
10
11

4 Etude de la connexit
e
4.1 Chanes et cycles, elementaires et simples .
4.2 Chemins et circuits, elementaires et simples
4.3 Graphes et sous-graphes connexes . . . . . .
4.4 Graphes et sous-graphes fortement connexes
4.5 Cycles et nombre cyclomatique . . . . . . .

.
.
.
.
.

11
11
12
12
13
14

5 Parcours eul
eriens et hamiltoniens
5.1 Chanes et cycles euleriens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2 Chanes et cycles hamiltoniens . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15
15
17

6 M
ethode de recherche de chemins
6.1 Rappel sur les operations booleennes sur les matrices . . . . . . . . . . . . . . . .
6.2 Recherche de chemins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3 Le probl`eme du plus court chemin . . . . . . . . . . . . . . . . . . . . . . . . . .

18
18
19
20

7 Arbres et arborescences
7.1 Definitions et proprietes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2 Arbres couvrants de poids minimum . . . . . . . . . . . . . . . . . . . . . . . . .

23
23
24

8 R
eseaux, r
eseaux de transport et probl`
emes de flots
8.1 Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.2 Recherche dun flot complet . . . . . . . . . . . . . . . . . . . .
8.3 Amelioration du flot . . . . . . . . . . . . . . . . . . . . . . . .
8.4 Recherche dun flot maximal : algorithme de Ford et Fulkerson
8.5 Exemple traite manuellement . . . . . . . . . . . . . . . . . . .
8.6 Recherche dun flot maximal a` co
ut minimal . . . . . . . . . . .

.
.
.
.
.
.

26
26
27
28
29
29
32

.
.
.
.

32
33
35
36
37

9 Couplages
9.1 Le probl`eme du couplage maximal
9.2 Couplage maximal et flot maximal
9.3 Couplage de poids maximal . . . .
9.4 Probl`emes daffectation . . . . . .

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.
.

.
.
.
.

.
.
.
.
.

.
.
.
.

.
.
.
.
.

.
.
.
.

.
.
.
.
.

.
.
.
.

.
.
.
.
.

.
.
.
.

.
.
.
.
.

.
.
.
.

.
.
.
.
.

.
.
.
.

.
.
.
.
.

.
.
.
.

.
.
.
.
.

.
.
.
.

.
.
.
.
.

.
.
.
.

.
.
.
.
.

.
.
.
.

.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

10 Probl`
emes dordonnancement
10.1 Le graphe potentiels-taches . . . . . . . . . .
10.2 Le graphe potentiels-etapes ou graphe PERT
10.3 Resolution . . . . . . . . . . . . . . . . . . . .
10.4 Complements . . . . . . . . . . . . . . . . . .

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

40
41
42
43
44

Annexe A - Implementation de lalgorithme de Moore-Dijkstra

46

Annexe B - Implementation de lalgorithme de Floyd

50

Annexe C - Implementation de lalgorithme de Prim

52

R
ef
erences

53

Avant propos
Faut tfaire un dessin ?. La representation dun probl`eme par un dessin, un plan, une
esquisse contribue souvent a` sa comprehension. Le langage des graphes est construit, a` lorigine, sur ce principe. Nombres de methodes, de proprietes, de procedures ont ete pensees ou
trouvees a` partir dun schema pour etre ensuite formalisees et developpees. Chacun dentre nous
a, au moins une fois, vu ou utilise un plan de metro, une carte de lignes ferroviaires, un plan
electrique, un arbre genealogique ou un organigramme dentreprise ; ainsi, tout le monde sait
plus ou moins intuitivement ce quest un graphe. Toutefois, entre cette notion vague o`
u des
points, representant des individus, des objets, des lieux ou des situations, sont relies par des
fl`eches, il y a une longue elaboration des concepts. La premi`ere difficulte a` laquelle on peut etre
confronte concerne la terminologie (tr`es abondante en theorie des graphes). Nous avons donc
choisi disoler les principales definitions du reste du cours en utilisant une mise en page differente.
La theorie des graphes constitue aujourdhui un corpus de connaissances tr`es important.
Comme son nom lindique, ce cours ne constituera donc quune introduction a` cette theorie. Nous
le preciserons ulterieurement, le developpement de cette theorie doit beaucoup a` celui des calculateurs. Il nous a donc semble incontournable dexposer quelques algorithmes de base (recherche
de chemin, darbre, de flots, etc.). Cependant, ceci ne constitue pas le corps de cet enseignement
meme si les probl`emes pratiques de mise en uvre sont importants. Nous nevoquerons pas, par
exemple, loptimalite de telle ou telle representation dun graphe au regard du traitement que
lon souhaite effectuer, ni la complexite (au sens nombre doperations elementaires) des algorithmes. De mani`ere a` permettre au lecteur interesse de juger des difficultes de mise en uvre
des algorithmes litteraux, plus clairs pour la comprehension, decrits dans le corps du texte,
r
quelques implementations a` laide du langage Matlab
sont donnes en annexe. Ces fonctions ne
pretendent nullement a` etre efficaces ou efficientes sur des donnees quelconques ; elles ne sont
donnees qu`a titre dillustration. De meme, nous nous sommes efforces ce citer, au moment de
lintroduction des methodes de base, les fonctions de la bote a` outils de manipulation de graphes
c
Metanet du logiciel Scilab
qui leur correspondent.

Un bref historique de la th
eorie des graphes

Tout le monde saccorde a` considerer que la theorie des graphes est nee en 1736 avec la
communication dEuler (1707-1783) dans laquelle il proposait une solution au cel`ebre probl`eme
des ponts de Konigsberg (Euler, 1736). Le probl`eme pose etait le suivant. Deux les A et D
sur la rivi`ere Pregel a` Konigsberg (alors capitale de la Prusse de lEst, aujourdhui rebaptisee
Kaliningrad) etaient reliees entre elles ainsi quaux rivages B et C a` laide de sept ponts (designes
par des lettres minuscules) comme le montre la figure 1.

Fig. 1 La rivi`ere Pregel et lle de Kneiphof


5

Le probl`eme pose consistait, a` partir dune terre quelconque A, B, C, ou D, a` traverser chacun


des ponts une fois et une seule et a` revenir a` son point de depart (sans traverser la rivi`ere a` la
nage !). Euler representa cette situation a` laide dun dessin o`
u les sommets representent les
terres et les aretes, les ponts comme le montre la figure 2.

C
A

B
Fig. 2 Graphe associe au probl`eme des ponts de Konigsberg
Comme nous le montrerons ulterieurement, Euler demontra que ce probl`eme na pas de solution. Le probl`eme des ponts de Konigsberg est identique a` celui consistant a` tracer une figure
geometrique sans lever le crayon et sans repasser plusieurs fois sur un meme trait.
Pendant les cent annees qui suivirent, rien ne fut fait dans ce domaine de recherche. En
1847, Kirchhoff (1824-1887) developpa la theorie des arbres pour lappliquer a` lanalyse de circuits electriques. Dix ans plus tard, Cayley (1821-1895) decouvrit la notion darbre alors quil
essayait denumerer les isom`eres satures des hydrocarbures de type C n H2n+2 . A cette epoque,
deux autres probl`emes dimportance pour la theorie des graphes furent egalement proposes et
partiellement resolus.
Le premier est la conjecture des quatre couleurs qui affirme que quatre couleurs suffisent
pour colorier nimporte quelle carte plane telle que les pays ayant une fronti`ere commune
soient de couleurs differentes. Cest sans doute Mobius (1790-1868) qui presenta le premier ce
probl`eme dans lun de ses cours en 1840. Environ dix ans apr`es, de Morgan (1806-1871) essaya de
resoudre ce probl`eme. Les lettres de de Morgan a` ces divers coll`egues mathematiciens constituent
les premi`eres references a` la conjecture des quatre couleurs. Le probl`eme devint cel`ebre apr`es sa
publication, par Cayley en 1879, dans le premier volume des Proceedings of the Royal Geographic
Society. Ce probl`eme est reste tr`es longtemps sans solution. Il fallut attendre jusquen 1976 pour
que Appel et Haken prouvent ce theor`eme en reduisant le probl`eme a` un nombre fini de situations particuli`eres et en trouvant une solution pour chacune dentre elles a` laide dun ordinateur.
Le second probl`eme est d
u a` Sir Hamilton (1805-1865). En 1859, il inventa un casse-tete
quil vendit pour 25 guinees a` un fabricant de jouet de Dublin. Ce jeu consiste en un dodeca`edre
regulier en bois (un poly`edre a` 12 faces et 20 sommets), chaque face etant un pentagone regulier
comme le montre la figure 3.
Trois aretes sont donc issues de chaque sommet. Un clou est fiche sur chaque sommet marque
du nom de vingt grandes villes mondiales. Le casse-tete consiste a` enrouler une ficelle passant
une fois et une seule fois par chacune des villes (sommets). Bien que la solution de ce probl`eme
soit aisee a` obtenir, personne na encore trouve de condition necessaire et suffisante de lexistence
dun tel chemin (appele chemin Hamiltonien) dans un graphe quelconque.
Cette periode fertile fut suivie dun demi-si`ecle de relative inactivite. Les annees 1920 virent
6

Fig. 3 Un dodeca`edre regulier


la resurgence de linteret pour les graphes. Lun des pionniers de cette periode fut Konig a` qui
lon doit le premier ouvrage consacre enti`erement a` la theorie des graphes (Konig, 1936). Il est
sans doute a` lorigine de lutilisation du terme graphe pour designer ce qui etait prealablement
considere comme un ensemble de points et de fl`eches.
A partir de 1946, la theorie des graphes a connu un developpement intense sous limpulsion de chercheurs motives par la resolution de probl`emes concrets. Parmi ceux-ci, citons de
mani`ere privilegiee Kuhn (1955), Ford et Fulkerson (1956) et Roy (1959). Parall`element, un
important effort de synth`ese a ete opere en particulier par Claude Berge. Son ouvrage Theorie
des graphes et ses applications publie en 1958 (Berge, 1958) marque sans doute lav`enement
de l`ere moderne de la theorie des graphes par lintroduction dune theorie des graphes unifiee
et abstraite rassemblant de nombreux resultats epars dans la litterature. Depuis, cette theorie
a pris sa place, en subissant de tr`es nombreux developpement essentiellement dus a` lapparition des calculateurs, au sein dun ensemble plus vaste doutils et de methodes generalement
regroupees sous lappellation recherche operationnelle ou mathematiques discr`etes.

2
2.1

Introduction
Quest-ce quun graphe ?

D
efinition 1
On appelle graphe G = (X, A) la donnee dun ensemble X dont les elements sont
appeles sommets et dune partie de A symetrique ( (x, y) A (y, x) A) dont
les elements sont appeles aretes.
En presence dune arete a = (x, y) qui peut etre notee simplement xy, on dit que
x et y sont les extremites de a, que a est incidente en x et en y, et que y est un
successeur ou voisin de x (et vice versa).
On dit quun graphe est sans boucle si A ne contient pas darete de la forme (x, x),
cest-`a-dire joignant un sommet a` lui-meme.
Le nombre de sommets est appele ordre du graphe.
Un graphe ne possedant pas de boucle ni daretes parall`eles (deux aretes distinctes joignant
la meme paire de sommets) est appele graphe simple ou 1-graphe. En revanche un p-graphe ou
graphe generalise est un graphe pour lequel il nexiste jamais plus de p aretes de la forme (x, x).
Graphiquement, les sommets peuvent etre representes par des points et larete a = (x, y)
par un trait reliant x a` y. On notera que la disposition des points et la longueur ou la forme
7

(rectiligne ou incurvee) des traits na aucune importance. Seule lincidence des differentes aretes
et sommets compte. A titre dexemple, les deux graphes de la figure 4 sont identiques.
1

4
3

Fig. 4 Deux representations graphiques dun meme graphe


Dans le trace graphique dun graphe, deux aretes peuvent sembler avoir une intersection en
un point qui nest pas un sommet. Cest le cas, par exemple, des aretes e et f du graphe de
la figure 5. De telles aretes peuvent etre vues comme etant placees dans des plans differents et
nayant donc aucun point commun.
a
e
b

d
f
c

Fig. 5 Les aretes e et f nont pas de point commun


Les graphes ainsi definis sont dits graphes non orientes. Dans certaines situations cependant, lorientation des aretes est importante.
D
efinition 2
On appelle graphe oriente ou digraphe G = (X, A) la donnee dun ensemble X dont
les elements sont appeles sommets et dune partie A de X X dont les elements
sont appeles arcs ou aretes.
En presence dun arc a = (x, y) qui peut etre note simplement xy, on dit que x est
lorigine (ou extremite initiale) et y lextremite (terminale) de a, que a est sortant en
x et incident en y, et que y est un successeur de x tandis que x est un predecesseur
de y. On dit aussi que x et y sont adjacents.

2.2

Graphes et applications multivoques

Lensemble des successeurs dun sommet x X est note (x). Lapplication qui, a` tout
element de X, fait correspondre une partie de X (un element de P(X)) est appelee une application multivoque. Lensemble des predecesseurs dun sommet x X peut alors etre note 1 (x)

o`
u 1 est lapplication (multivoque) reciproque de .
Si le graphe G est un 1-graphe, on constate quil est parfaitement determine par la donnee
de lensemble X et de lapplication multivoque de X P(X). Un tel graphe peut donc aussi
etre note : G = (X, ).

2.3

Principales d
efinitions

Les definitions qui suivent sont enoncees dans le cadre des graphes orientes. Le lecteur transposera aisement ces definitions (si elles ont un sens) au cas des graphes non orientes.
D
efinition 3
On appelle degre sortant ou demi-degre exterieur dun sommet x le nombre darcs
de la forme a = (x, y) avec y 6= x, cest-`a-dire le nombre delements de (x)\ {x}.
On note ds (x) ce degre.
On appelle degre entrant ou demi-degre interieur dun sommet x le nombre darcs
de la forme a = (y, x) avec y 6= x, cest-`a-dire le nombre delements de 1 (x)\ {x}.
On note de (x) ce degre.
On appelle degre de x (ou valence) la somme du degre entrant et du degre sortant.
Un sommet de degre entrant non nul et de degre sortant nul est appele puits, tandis quun
sommet de degre entrant nul et de degre sortant non nul est appele source.
Un sommet nayant pas darcs incidents est appele sommet isole ; ces sommets ont un degre
nul. Deux arcs adjacents sont dits en serie si leur sommet commun est de degre egal a` deux.
Dans la definition dun graphe, lensemble des arcs A peut etre vide ; dans ce cas, on a affaire
a` un graphe nul. Tous les sommets dun graphe nul sont donc des sommets isoles. En revanche,
lensemble des sommets X ne peut etre vide sinon le graphe correspondant nexiste pas. Cela
signifie donc quun graphe comporte au moins un sommet.
D
efinition 4
On appelle graphe reflexif un graphe possedant une boucle sur chaque sommet.
Un graphe est symetrique si, pour tout arc a 1 = (x, y) appartenant a` A, larc
a2 = (y, x) appartient egalement a` A.
Un graphe est antisymetrique si, pour tout arc a 1 = (x, y) appartenant a` A, larc
a2 = (y, x) nappartient pas a` A.
Enfin, un graphe est transitif si, quelque soit deux arcs adjacents a 1 = (x, y) et
a2 = (y, z) appartenant a` A, alors larc a 3 = (x, z) appartient egalement a` A.
Le concept de graphe symetrique est tr`es proche de celui des graphes non orientes. En
fait, a` tout graphe symetrique, on peut associer un graphe non oriente en substituant aux arcs
a1 = (x, y) et a2 = (y, x), une arete a = (y, x).

D
efinition 5
Un graphe G = (X, A) est dit complet si, pour toute paire de sommets (x, y), il existe
au moins un arc de la forme (x, y) ou (y, x).
Un graphe simple complet dordre n est note K n . Un sous-ensemble de sommets
C X tel que deux sommets quelconques de C sont relies par une arete est appele
une clique.
D
efinition 6
Soit un graphe G = (X, A) et X 0 X. Le sous-graphe engendre par X 0 est G0 = (X 0 , A0 ),
A0 etant forme des aretes dont les deux extremites sont dans X 0 .
Si lon se donne un sous-ensemble A1 de A, le graphe partiel engendre par A 1 est
G1 = (X, A1 ).
Dans certaines situations, les sommets de G 1 ayant un degre nul (sommets isoles nayant
aucune arete incidente appartenant a` A 1 ) peuvent etre supprimes du graphe partiel.
Dapr`es la definition precedente, une clique dun graphe G est donc un sous-graphe complet
de G.

Modes de repr
esentation dun graphe

Comme nous lavons mentionne precedemment, lessor de la theorie des graphes est essentiellement d
u a` lav`enement de puissants calculateurs. Il est donc legitime de sinteresser a` la
mani`ere de representer les graphes au sein dun ordinateur. Plusieurs modes de representation
peuvent etre envisages selon la nature des traitements que lon souhaite appliquer au graphe
considere.

3.1

Listes de succession

Un graphe peut etre represente a` laide dun dictionnaire ; il sagit dune table a` simple entree
o`
u chaque ligne correspond a` un sommet et comporte la liste des successeurs ou des predecesseurs
de ce sommet. Considerons le graphe de la figure 6.
1

7
6

1
3

5
8

4
2

Fig. 6 Un graphe elementaire


Celui-ci peut etre represente par les deux tables suivantes :
10

1
2
3
4
5

2, 3, 4, 5
3
4
1, 4

1
2
3
4
5

5
1
1, 2
1,3,5
1

Dans la mesure o`
u, pour une table donnee, le nombre de successeurs ou de predecesseurs nest
pas le meme pour chaque sommet, il est preferable de representer le dictionnaire sous forme de
deux tableaux : le premier comprenant autant delements que de sommets, ces elements pointant,
dans un second tableau, les debuts de listes de successeurs (ou de predecesseurs). La figure 7
montre cette organisation en ce qui concerne la table des successeurs.

1
5

2 3

6
0
7

4 5

4 1

Fig. 7 Codage dune liste de successeurs


Cette representation est un peu redondante dans le cas des graphes non orientes ; elle est
cependant assez commode pour parcourir le graphe. Lencombrement de cette representation est
minimal puisquil correspond exactement a` la quantite dinformation fournie par le graphe.

3.2

Matrice dadjacence

Les outils classiques dalg`ebre lineaire peuvent egalement etre utilises pour coder les graphes.
La premi`ere idee consiste a` considerer chaque arc comme un lien entre deux sommets.
D
efinition 7
Considerons un graphe G = (X, A) comportant n sommets. La matrice dadjacence
de G est egale a` la matrice U = (uij ) de dimension n n telle que
uij =

1 si (i, j) A (cest-`a-dire (i, j) est une arete)


0 sinon

Une telle matrice, ne contenant que des 0 et des 1 est appelee, de mani`ere
generale, une matrice booleenne.
Un graphe oriente quelconque a une matrice dadjacence quelconque, alors quun graphe non
oriente poss`ede une matrice dadjacence symetrique. Labsence de boucle se traduit par une
diagonale nulle. La matrice dadjacence du graphe de la figure 6 est la suivante :

0 1 1 1 1
0 0 1 0 0

U =
0
0
0
1
0

0 0 0 0 0
1 0 0 1 0
11

Ce mode de representation engendre des matrices tr`es creuses (i.e. comprenant beaucoup
de zeros). Cependant la recherche de chemins ou de chanes seffectue aisement avec une telle
representation (cf 6.2). De plus, la matrice dadjacence poss`ede quelques proprietes qui peuvent
etre exploitees. Considerons un graphe G et sa matrice dadjacence associee U :
la somme des elements de la ieme ligne de U est egale au degre sortant d s (xi ) du sommet
xi de G.
la somme des elements de la j eme colonne de U est egale au degre entrant d e (xj ) du sommet
xj de G.
U est symetrique si, et seulement si, le graphe G est symetrique.

3.3

Matrice dincidence

La seconde idee permettant une representation matricielle dun graphe exploite la relation
dincidence entre aretes et sommets.
D
efinition 8
Considerons un graphe oriente sans boucle G = (X, A) comportant n sommets
x1 , . . . , xn et m aretes a1 , . . . , am . On appelle matrice dincidence (aux arcs) de
G la matrice M = (mij ) de dimension n m telle que :

1 si xi est lextremite initiale de aj


1 si xi est lextremite terminale de aj
mij =

0 si xi nest pas une extremite de aj

Pour un graphe non oriente sans boucle, la matrice dincidence (aux aretes) est
definie par :
mij =

1 si xi est une extremite de aj


0 sinon

La matrice dincidence du graphe de la figure 6 secrit sous la forme suivante :

1
0
1
0
1
1 1
0
1
1
0
0
0
0
0
0

1
0
0
0
0
M = 0 1 1

0
0
0 1 1
0
0 1
0
0
0
0
0 1
1
1

4
4.1

Etude de la connexit
e
Chanes et cycles,
el
ementaires et simples

D
efinition 9
Une chane est une sequence finie et alternee de sommets et daretes, debutant et
finissant par des sommets, telle que chaque arete est incidente avec les sommets qui
lencadre dans la sequence. Une arete ne doit pas intervenir plusieurs fois dans la
sequence contrairement a` un sommet.
Le premier et le dernier sommet sont appeles (sommets) extremites de la chane.

12

La longueur de la chane est egale au nombre daretes qui la composent.


Si aucun des sommets composant la sequence napparat plus dune fois, la chane
est dite chane elementaire.
Si aucune des aretes composant la sequence napparat plus dune fois, la chane est
dite chane simple.
Un cycle est une chane dont les extremites concident.
Un cycle elementaire (tel que lon ne rencontre pas deux fois le meme sommet en le
parcourant) est un cycle minimal pour linclusion, cest-`a-dire ne contenant strictement aucun autre cycle.

4.2

Chemins et circuits,
el
ementaires et simples

Toutes les definitions precedentes, sappliquant au cas des graphes non orientes, peuvent etre
transposees au cas des graphes orientes.
D
efinition 10
Un chemin est une sequence finie et alternee de sommets et darcs, debutant et
finissant par des sommets, telle que chaque arc est sortant dun sommet et incident au
sommet suivant dans la sequence (cela correspond a` la notion de chane orientee).
Si aucun des sommets composant la sequence napparat plus dune fois, le chemin
est dit chemin elementaire.
Si aucune des aretes composant la sequence napparat plus dune fois, le chemin est
dit chemin simple.
Un circuit est un chemin dont les extremites concident.
En parcourant un circuit elementaire, on ne rencontre pas deux fois le meme sommet.

4.3

Graphes et sous-graphes connexes

De mani`ere intuitive, la notion de connexite est triviale. Un graphe est connexe si lon peut
atteindre nimporte quel sommet a` partir dun sommet quelconque en parcourant differentes
aretes. De mani`ere plus formelle, on a :
D
efinition 11
Un graphe G est connexe sil existe au moins une chane entre une paire quelconque
de sommets de G.
La relation :
xi R x j

soit xi = xj
soit il existe une chane joignant x i a` xj

est une relation dequivalence (reflexivite, symetrie, transitivite). Les classes dequivalence induites sur X par cette relation forment une partition de X en X 1 , X2 , . . . , Xp .

13

Le nombre p de classes dequivalence distinctes est appele nombre de connexite du graphe.


On peut alors donner une autre definition concernant la connexite dun graphe. Un graphe
est dit connexe si et seulement si son nombre de connexite est egal a` 1.
Les sous-graphes G1 , G2 , . . . , Gp engendres par les sous-ensembles X 1 , X2 , . . . , Xp sont appeles les composantes connexes du graphe. Chaque composante connexe est un graphe connexe.
La verification de la connexite dun graphe est un des premiers probl`emes de la theorie des
graphes. Nous decrirons ulterieurement des algorithmes permettant detablir cette connexite.
D
efinition 12
Un point darticulation dun graphe est un sommet dont la suppression augmente le
nombre de composantes connexes.
Un isthme est une arete dont la suppression a le meme effet.
Un ensemble darticulation E X dun graphe connexe G est un ensemble de
sommets tel que le sous-graphe G0 deduit de G par suppression des sommets de E,
ne soit plus connexe.

4.4

Graphes et sous-graphes fortement connexes

D
efinition 13
Un graphe oriente est dit fortement connexe sil existe un chemin joignant deux sommets quelconques.
La relation :

soit xi = xj
xi R x j
soit il existe a` la fois un chemin joignant x i a` xj

et un chemin joignant xj a` xi
est une relation dequivalence et les classes dequivalence induites sur X par cette relation forment
une partition de X en X1 , X2 , . . . , Xq . Les sous-graphes G1 , G2 , . . . , Gq engendres par les sousensembles X1 , X2 , . . . , Xq sont appeles les composantes fortement connexes du graphe.
Pour le graphe de la figure 8, les differentes composantes fortement connexes sont :
C1 = {1, 2, 3, 4, 5}

C2 = {6, 7}

C3 = {8}

D
efinition 14
On appelle graphe reduit Gr le quotient du graphe G par la relation de forte connexite
Gr = G/R ; les sommets de Gr sont donc les composantes fortement connexes et il
existe un arc entre Ci et Cj si et seulement sil existe au moins un arc entre un
sommet de Ci et un sommet de Cj dans le graphe G. On verifie que le graphe G r est
sans circuit.
Le graphe reduit correspondant au graphe de la figure 8 est donne figure 9. La recherche
des composantes fortement connexes et la determination du graphe reduit revetent une grande
importance pour lanalyse structurale dun syst`eme.
14

Fig. 8 Graphe oriente


C3
C1

C2

Fig. 9 Graphe reduit du graphe de la figure 8

4.5

Cycles et nombre cyclomatique

Les notions de cycle et de cycle elementaire ont dej`a ete definies au paragraphe 4.1. Pour un
cycle donne, on designe par + lensemble des arcs du cycle orientes dans le sens de parcours
et par lensemble des arcs orientes en sens contraire. Si le graphe poss`ede m arcs designes
par a1 , . . . , am , on peut faire correspondre a` tout cycle un vecteur = ( 1 , 2 , . . . , m ) tel
que :

1 si ai +
1 si ai
i =

0 si ai
/ +
On remarque que est aussi un vecteur associe au cycle (obtenu en choisissant lautre
sens de parcours). Au signe pr`es, on pourra donc identifier le cycle au vecteur .
D
efinition 15
On dit que p cycles 1 , 2 , . . . , p sont dependants sil existe, entre leurs vecteurs
associes, une relation vectorielle de la forme :
1 1 + 2 2 + . . . + p p = 0
avec les i non tous nuls.
Si la satisfaction de la relation precedente implique i = 0, i = 1, . . . , p, les p cycles
sont dits independants.
15

Une base de cycles est un ensemble minimal de cycles independants tel que tout
vecteur representatif dun cycle puisse sexprimer comme combinaison lineaire des
cycles de la base.
On appelle nombre cyclomatique dun graphe G, la dimension de la base de cycles.
On peut noter que le nombre cyclomatique v(G) dun graphe a` n sommets, m arcs et p
composantes connexes est egal a` v(G) = m n + p.

Parcours eul
eriens et hamiltoniens

Letude des probl`emes euleriens ou hamiltoniens (recherche dune chane ou dun cycle
passant exactement une fois par chaque arete ou par chaque sommet ) remonte aux origines
de la theorie des graphes.
Linteret porte aujourdhui a` ces probl`emes sexplique par leurs nombreuses applications :
tournees de distribution, trace automatique sur ordinateur, probl`emes dordonnancement datelier, etc.

5.1

Chanes et cycles eul


eriens

Il sagit l`a dune generalisation du jeu bien connu consistant a` dessiner toutes les aretes dun
graphe avec un crayon sans jamais le soulever, ni passer deux fois sur la meme arete.
D
efinition 16
Soit G = (X, A) un graphe oriente.
Une chane eulerienne est une chane empruntant une fois et une fois seulement
chaque arete de G.
Un cycle eulerien est une chane eulerienne dont les extremites concident.
Un graphe possedant un cycle eulerien est appele graphe eulerien.
Le probl`eme de lexistence et de la determination dun cycle eulerien (dune chane eulerienne)
dans un graphe non oriente a ete pose la premi`ere fois et resolu par Euler en 1736 a` propos du
cel`ebre probl`eme des ponts de Konigsberg evoque au premier paragraphe. Euler prouva limpossibilite de lobtention dune solution en demontrant le theor`eme suivant :
Th
eor`
eme 1
Un graphe non oriente connexe poss`ede une chane eulerienne si et seulement si le
nombre de sommets de degre impair est egal a` 0 ou 2.
Il admet un cycle eulerien si et seulement si tous ses sommets ont un degre pair.
Montrons que la condition est necessaire. Si le cycle eulerien existe, on peut lorienter de
mani`ere arbitraire. En chaque sommet, le nombre darcs incidents doit etre egal au nombre
darcs sortants, les sommets doivent donc etre de degre pair. Dans le cas dune chane, les deux
extremites font exception ; on part ou lon arrive une fois de plus, do`
u un degre impair pour ces

16

deux sommets extremites.


Montrons maintenant que la condition est suffisante. Raisonnons par recurrence en supposant
que le theor`eme est verifie pour des graphes connexes ayant moins de m aretes. Soit G = (X, A)
un graphe de m aretes verifiant la condition du theor`eme. Si G poss`ede deux sommets de degre
impair, soient a et b ces sommets (si tous les sommets de G sont de degre pair, on choisit a quelconque et b confondu avec a). Soit L la chane parcourue par un voyageur partant de a dans
une direction quelconque et seulement soumis a` linterdiction demprunter deux fois la meme
arete. Si, a` un instant donne, il arrive en un sommet x 6= b, il aura utilise un nombre impair
daretes incidentes a` x et il pourra donc repartir par une arete non dej`a utilisee. Quand il ne
peut plus bouger, cest donc quil est en b. Si toutes les aretes ont ete utilisees, L est une chane
eulerienne et le theor`eme est vrai. Dans le cas contraire, le graphe partiel, defini par les aretes
non utilisees, a tous ses sommets de degre pair (de part la nature des suppressions effectuees).
Soient G01 , G02 , ..., G0p les composantes connexes de G qui comportent au moins une arete. Chacun
des sous graphes G0i poss`ede moins de m aretes et dapr`es lhypoth`ese de recurrence, il admet
un cycle eulerien i . Comme G est connexe, L rencontre successivement G 01 , G02 , ..., G0p en les
sommets x1 , x2 , . . . , xp . Le parcours alors constitue par :

la chane L entre a et x1 ,
le cycle 1 entre x1 et x1 ,
la chane L entre x1 et x2 ,
le cycle 2 entre x2 et x2 ,
...
la chane L entre xp et b.

constitue bien une chane eulerienne entre a et b dans G. Le theor`eme est donc vrai a` lordre m.
Comme il est vrai a` lordre 1, il est demontre pour tout m.
Le probl`eme dEuler peut aussi etre considere avec des sens uniques.
D
efinition 17
Un chemin dans un graphe oriente est dit eulerien sil passe exactement une fois par
chaque arete.
Un graphe oriente est dit eulerien sil admet un circuit eulerien.
La demonstration precedente peut aisement etre adaptee a` cette nouvelle situation.
Th
eor`
eme 2
Un graphe oriente connexe admet un chemin eulerien (mais pas de circuit eulerien)
si, et seulement si, pour tout sommet sauf deux (a et b), le degre entrant est egal au
degre sortant et
de (a) = ds (a) 1

et

de (b) = ds (b) + 1

Un graphe oriente connexe admet un circuit eulerien si, et seulement si, pour tout
sommet, le degre entrant est egal au degre sortant.
Parmi les probl`emes prototypes classiques des formulations precedentes, citons le probl`eme
du postier chinois (non oriente) qui consiste a` parcourir les rues dune ville en passant au moins
17

une fois dans chaque rue, le graphe netant pas necessairement eulerien ; on cherche bien s
ur a`
minimiser la longueur totale du parcours.
On rencontre ce genre de probl`eme dans les organisations de tournees de distribution de
courrier, de ramassage dordures, dinspection de reseaux de distribution. Dans le cas oriente
o`
u chaque arc doit etre emprunte dans un sens privilegie, le probl`eme se ram`ene a` la recherche
dun flot a` co
ut minimum (cf. 8.4).
Il sagit dabord de savoir si le parcours chinois a au moins une solution. Nous enoncons
ici sans demonstration les resultats suivants.
Th
eor`
eme 3
Un graphe non oriente admet un cycle chinois si, et seulement si, il est connexe.
Un graphe oriente admet un circuit chinois si, et seulement si, il est fortement
connexe.
La resolution du probl`eme du postier chinois peut sinspirer des methodes de recherche de
chanes ou cycles euleriens. Cependant, on pref`erera formuler le probl`eme en termes de couplage
parfait de poids minimum (cf. 9.3)

5.2

Chanes et cycles hamiltoniens

Soit G = (X, A) un graphe connexe dordre n.


D
efinition 18
On appelle chemin hamiltonien (chane hamiltonienne) un chemin (une chane) passant une fois, et une fois seulement, par chacun des sommets de G.
Un chemin hamiltonien (une chane hamiltonienne) est donc un chemin (une chane)
elementaire de longueur n 1.
Un circuit hamiltonien (un cycle hamiltonien) est un circuit (un cycle) qui passe une
fois, et une seule fois, par chacun des sommets de G.
On dit quun graphe G est hamiltonien sil contient un cycle hamiltonien (cas non
oriente) ou un circuit hamiltonien (cas oriente).
La notion de cycle hamiltonien trouve son origine dans le jeu invente par Hamilton que nous
avons evoque au premier paragraphe. De nombreux probl`emes concrets peuvent etre formules
en termes de recherche de parcours hamiltoniens.
On peut en particulier citer le probl`eme du voyageur de commerce. Un representant de commerce doit rendre visite a` n clients x 1 , x2 , . . . , xn en partant dune ville x0 et revenir a` son
point de depart. Il connat les distances d 0j qui separent le depot x0 de chacun de ses clients xj ,
ainsi que la distance dij entre deux clients quelconques xi et xj .
Dans quel ordre doit-il rendre visiste a` ses clients pour que la distance totale parcourue soit
minimale ? Ce probl`eme revient a` chercher un cycle hamiltonien de longueur totale minimale
dans le graphe complet G construit sur lensemble des sommets X = {x 0 , x1 , . . . , xn }, les
18

aretes etant munies des longueurs d ij .


Lorsque le point darrivee est different du point de depart, le probl`eme revient a` rechercher
une chane hamiltonienne de longueur totale minimale.
Un autre probl`eme classique concerne lordonancement de taches. On cherche un ordre dans
lequel on peut effectuer n taches donnees (deux taches quelconques ne pouvant etre effectuees simultanement) tout en respectant un certain nombre de contraintes danteriorite. Si lon construit
le graphe G dont lensemble des sommets correspond a` lensemble des taches, et o`
u il existe un
arc (i, j) si la tache i peut etre effectuee avant la tache j, le probl`eme revient a` determiner un
chemin hamiltonien de G.
Dautres probl`emes concrets peuvent se ramener egalement a` la problematique precedente.
On appelle cycle (circuit) prehamiltonien dun graphe G, un cycle (un circuit) passant au moins
une fois par chaque sommet de G. Un graphe G qui admet un tel cycle (ou circuit) est appele
graphe prehamiltonien et une condition necessaire et suffisante pour quil en soit ainsi est que
G soit connexe (fortement connexe).
La recherche dun cycle (circuit) prehamiltonien de longueur minimale dans un graphe G
o`
u les aretes (arcs) ont des longueurs donnees se ram`ene a` un probl`eme de recherche de cycle
(circuit) hamiltonien dans le graphe complet G 0 construit sur le meme ensemble de sommets, la
longueur dune arete (arc) (i, j) de G 0 etant egale a` la longueur de la plus courte chane (chemin)
entre i et j.
De nombreux probl`emes du type voyageur de commerce sont en realite des probl`emes
prehamiltoniens et, pour les resoudre, on commencera par calculer la matrice des plus courts
chemins (des plus courtes chanes).
Notons que lon ne connat pas de condition necessaire et suffisante dexistence de cycles ou
de circuits hamiltoniens.

6
6.1

M
ethode de recherche de chemins
Rappel sur les op
erations bool
eennes sur les matrices

Rappelons bri`evement les deux operations daddition et de multiplication booleenne notees


et . Les variables A et B sont booleennes et prennent donc leur valeur dans {0, 1}
A B AB AB
0 0
0
0
0 1
1
0
1 0
1
0
1 1
1
1
Avant de proceder a` la recherche systematique de chemins, examinons, de facon generale, la
signification des operations sur les matrices dadjacence en termes de graphes.

19

Addition bool
eenne des matrices
Soient deux graphes G1 et G2 , possedant les memes sommets, et leurs matrices dadjacence
associees U1 et U2 de dimension n n. Calculons U3 = U1 U2 telle que :
(U3 )ij = (U1 )ij (U2 )ij
Chaque element non nul de U3 represente, par definition, un arc de G 3 decrit par la matrice
U3 . Pour quun element de U3 soit non nul, il faut que lun au moins des elements correspondants
de U1 ou U2 soit non nul. On conclut donc que cette operation revient a` construire un graphe
G3 comportant a` la fois les arcs de G1 et ceux de G2 .
Multiplication bool
eenne des matrices
Considerons de nouveau les deux graphes G 1 et G2 precedents et calculons U4 = U1 U2
telle que :
(U4 )ij = (U1 )i1 (U2 )1j (U1 )i2 (U2 )2j . . . (U1 )in (U2 )nj
Pour que (U4 )ij soit egal a` 1, il faut quil existe au moins un indice k tel que simultanement
les elements (U1 )ik et (U2 )kj soit egaux a` 1.
Cela revient a` construire un graphe G 4 dans lequel un arc (i, j) existe si et seulement sil
existe un sommet k tel que (i, k) soit un arc de G 1 et (k, j) un arc de G2 .

6.2

Recherche de chemins

Soit U la matrice dadjacence associee au graphe G. Par definition, U ij = 1 indique lexistence dun chemin de longueur 1 entre les sommets i et j. Multiplions U par elle-meme, soit
U 2 = U U et considerons le graphe G0 associe a` U 2 . Chaque arc (i, j) de G0 exprime lexistence dun chemin de longueur 2 du sommet i au sommet j. En effet, dapr`es linterpretation
precedente, (i, j) existe si et seulement sil existe un sommet k tel que (i, k) et (k, j) sont des
arcs de G.
Demontrons par recurrence que, plus generalement, U p donne lexistence des chemins de longueur p. Soit un graphe possedant n sommets et U sa matrice dadjacence associee. Admettons
la propriete pour p 1 et demontrons la pour p.
Un chemin de longueur p entre les sommets i et j peut se decomposer en un chemin de
longueur p 1 entre les sommets i et k auquel on ajoute larc (k, j). Lexistence du chemin entre
les sommets i et k est donnee, par hypoth`ese, par lelement (U p1 )ik , celle de larc (k, j) par Ukj .
Lexistence dun chemin joignant les sommets i et j et passant par le sommet k est donc
donnee par (U p1 )ik Ukj . Or, le sommet k est quelconque et peut etre lun des n sommets du
graphe. Lexistence dun chemin entre les sommets i et j secrit donc :



Cij = U p1 i1 U1j U p1 i2 U2j . . . U p1 in Unj

Lexpression de Cij est, par definition, celle donnee pour calculer lelement (U p )ij . Comme
nous lavons verifiee pour p = 2, la propriete est vraie quel que soit p.
Remarquons que pour un graphe a` n sommets, un chemin elementaire comprend au plus
n 1 arcs. Il suffit donc, pour avoir lexistence de tous les chemins, delever successivement
la matrice U jusqu`a la puissance n. De plus, si deux matrices successives ainsi calculees sont
identiques, il est inutile de poursuivre le calcul jusqu`a la puissance n.
20

6.3

Le probl`
eme du plus court chemin

Le probl`eme de la recherche du plus court chemin dans un graphe se rencontre dans de


nombreuses applications. On peut citer entre autres :

les probl`emes de tournees,


certains probl`emes dinvestissement et de gestion de stocks,
les probl`emes de programmation dynamique a` etats discrets et temps discret,
les probl`emes doptimisation de reseaux (routiers, telecommunications),
certaines methodes de traitement numerique du signal, de codage et de decodage de linformation,
les probl`emes de labyrinthe et de recreations mathematiques.

Le probl`eme considere se formule ainsi. Etant donne un graphe oriente G = (X, A), on associe a` chaque arc a A un nombre l(a) R appele longueur de larc. On dit alors que G est
value par les longueurs l(a). Si a = (i, j), on utilisera egalement la notation l ij pour la longueur
de larc a.
Le probl`eme du plus court chemin entre deux
P sommets i et j sera de trouver un chemin
(i, j) de i et j dont la longueur totale l() = a(i,j) l(a) soit minimum.
Ce probl`eme a de nombreuses applications pratiques car la longueur l(a) peut sinterpreter
aussi bien comme un co
ut de transport sur larc a, comme les depenses de construction de larc
a, comme le temps necessaire pour parcourir larc a, etc.
Selon les proprietes du graphe traite (les longueurs sont quelconques, positives ou toutes
egales, le graphe est quelconque ou sans circuit) et selon le probl`eme considere (recherche du
plus court chemin dun sommet a` un autre, ou dun sommet a` tous les autres, ou entre tous
les couples de sommets) il existe de nombreux algorithmes permettant lobtention dune solution.
Nous nous contenterons simplement ici de decrire les algorithmes les plus classiques, sans
explorer toutes les situations.
Dans beaucoup de situations, les longueurs sont positives. On utilisera alors lalgorithme
de Moore-Dijkstra pour calculer le plus court chemin dun sommet (arbitrairement le sommet
numero 1) a` tous les autres.
Posons X = {1, 2, . . . , n}. Soit lij la longueur de larc (i, j) si (i, j) A. Definissons (i)
comme la longueur minimum des chemins du sommet 1 au sommet i ; en particulier (1) = 0.
Lalgorithme proc`ede en n 1 iterations. Au debut de chacune des iterations, lensemble des
sommets est partitionne en deux sous-ensembles S et S = X\S. Le sous-ensemble S (initialise
a` {1}) contient les sommets definitivement marques, cest-`a-dire les sommets pour lesquels la
marque (i) represente effectivement la longueur du plus court chemin entre le sommet 1 et le
sommet i. Le complementaire S contient tous les sommets ayant une marque provisoire definie
par :
k S : (k) = min ((i) + lik )
iS1
k

On demontre alors aisement qu`a une etape quelconque si j est le sommet de marque provisoire (j) minimale cest-`a-dire :
(j) = min ((k))
kS

21

alors (j) = (j), cest-`a-dire que le sommet j peut etre inclus dans lensemble S des sommets

definitivement marques (et, bien s


ur, enleve de S).
On mettra donc a` jour lensemble S en incluant j (S S {j}) ainsi que les marques provisoires des sommets k de S relies par un arc (j, k). Ceci se fera en considerant successivement tous
les sommets k (j) S et en remplacant (k) par (j) + ljk chaque fois que (j) + ljk < (k).
Si lon souhaite determiner explicitement le plus court chemin, et non pas seulement sa longueur,
on conservera, dans un tableau de predecesseurs, linformation selon laquelle le predecesseur de
k est j.
Algorithme 1 (Moore-Dijkstra)
Recherche du plus court chemin entre deux sommets dans un graphe a` longueurs positives.
(a) - Initialisations
S = {2, 3, . . . , n}
(1) = 0

l1i si i (1)
(i) =
+ sinon
(b) - Selectionner j tel que
(j) = min ((k))
kS

Faire S S\{j}
Si S = alors FIN
(c) - Faire pour tout i S (j)
(i) min ((i), (j) + lji )
Retourner en (b)
r
On trouvera en annexe A, un programme Matlab
implementant cet algorithme. Sous
c

Scilab , la commande relative a` la recherche du plus court chemin entre deux sommets se
nomme shortest path.

Considerons, a` titre dexemple, le graphe de la figure 10. Les iterations de lalgorithme


precedent sont les suivantes :
(a) S = {2, 3, 4, 5, 6}, (1) = 0, (2) = 7, (3) = 1, (4) = (5) = (6) =
(b) j = 3, S = {2, 4, 5, 6}
(c) S (3) = {2, 5, 6}, (2) = min(7, 1 + 5) = 6, (5) = min(, 1 + 2) = 3,
(6) = min(, 1 + 7) = 8
(b) j = 5, S = {2, 4, 6}
(c) S (5) = {2, 4}, (2) = min(6, 3 + 2) = 5, (5) = min(, 3 + 5) = 8
(b) j = 2, S = {4, 6}
(c) S (2) = {4, 6}, (4) = min(8, 5 + 4) = 8, (6) = min(8, 5 + 1) = 6
(b) j = 6, S = {4}
(c) S (2) =
(b) j = 4, S =

22

4
5

4
2

2
7

Fig. 10 Graphe oriente


Les longueurs des plus courts chemins seront donc :
(1) = 0, (2) = 5, (3) = 1, (4) = 8, (5) = 3 et (6) = 6
On peut egalement sinteresser a` la determination des plus courts chemins entre toutes les
paires de sommets (on se place toujours dans la situation o`
u les longueurs sont toutes positives).
On peut, bien s
ur, utiliser lalgorithme precedent, mais son efficacite est faible devant ce type
de probl`eme. On pref`erera un algorithme se rattachant aux methodes matricielles. Lalgorithme
de Floyd que nous allons presenter est particuli`erement simple dans sa mise en uvre.
Notons L = (lij ) la matrice n n dont le terme (i, j) est egal a` la longueur de larc (i, j) si
(i, j) A et + sinon (pour les termes diagonaux, on pose l ii = 0).
(k)

Pour 1 k n, notons L(k) = (lij ) la matrice dont le terme (i, j) represente la longueur
minimale dun chemin dorigine i et dextremite j, et astreint a` la condition que tous les sommets
intermediaires appartiennent au sous-ensemble {1, 2, . . . , k}.
Pour k = 0, on a L(0) = L, puisque lij est la longueur du chemin direct (unique) entre i et j
(sans sommet intermediaire). On remarque alors que les matrices L (k) sont liees par la relation
de recurrence :


(k)
(k1) (k1)
(k1)
lij = min lij
, lik
+ lkj
En effet, deux situations peuvent se produire suivant que le plus court chemin de i a` j a`
sommets intermediaires dans {1, 2, . . . , k} emprunte le sommet k ou non.
Dans le premier cas, ce chemin est forme dun sous-chemin entre i et k, suivi dun sous-chemin
entre k et j, chacun ne pouvant utiliser comme sommets intermediaires que des sommets de
(k)
(k1)
(k1)
{1, 2, . . . , k 1} et devant etre de longueur minimale. On doit donc avoir l ij = lik
+ lkj .
(k)

(k1)

Dans le second cas, on doit evidemment avoir l ij = lij

La matrice L(n) , donnant lensemble des valeurs des plus courts chemins dans le graphe,
pourra donc etre determinee en n etapes de recurrence a` partir de la relation precedente.

23

Algorithme 2 (Floyd)
Recherche de la matrice des plus courts chemins dans un graphe a` longueurs positives.
Pour k de 1 a` n
Pour tout i et j de 1 a` n faire
lij = min (lij , lik + lkj )
Comme pour lalgorithme precedent, si lon souhaite, en plus de la longueur des chemins,
exhiber explicitement le chemin, on mettra a` jour, au f
ur et a` mesure de lintroduction dun
nouveau sommet k, une matrice de predecesseurs.
r
Un programme Matlab
implementant cet algorithme est donne en annexe B.

Arbres et arborescences

7.1

D
efinitions et propri
et
es

D
efinition 19
Un arbre est un graphe connexe sans cycles.
Un graphe sans cycle qui nest pas connexe est appele une foret (chaque composante
connexe est un arbre).
Par definition meme, un arbre est donc un graphe simple. On constate egalement que
T = (X, T ) est un arbre si et seulement sil existe une chane et une seule entre deux sommets quelconques.
Etant donne un graphe quelconque G = (X, A) un arbre de G est un graphe partiel connexe
et sans cycles. Si ce graphe partiel inclut tous les sommets du graphe G, larbre est appele
arbre maximum ou arbre couvrant. Une foret de G est un graphe partiel sans cycle de G (non
necessairement connexe). Une foret maximale de G est une foret de G maximale pour linclusion
(lajout dune seule arete supplementaire du graphe a` cette foret cree un cycle).
Considerons un graphe G = (X, A) comportant n sommets, m arcs et p composantes
connexes ; lalgorithme suivant permet de construire une foret maximale de G.
Initialement, tous les arcs du graphe sont incolores. La methode consiste a` examiner successivement tous les arcs du graphe (dans nimporte quel ordre) et a` les colorer soit en rouge
soit en vert.
A une etape quelconque, Gc est le graphe partiel engendre par les arcs colores (rouges ou
verts) et Gr le graphe partiel engendre par les arcs rouges.
Chaque fois quun nouvel arc a incolore est examine :
soit il passe par a un cycle elementaire dont tous les arcs (autres que a) sont rouges ; on
colore alors larc en vert, le nombre de connexite de G c et de Gr reste constant,
soit un tel cycle nexiste pas, auquel cas larc a permet de connecter deux sommets qui
netaient pas encore connectes dans G c ; on colore larc a en rouge, le nombre de connexite
de Gc et de Gr decrot de 1.

24

Pour montrer que le graphe partiel Gr obtenu est bien une foret maximale de G, il suffit
dobserver qu`a tout instant, le graphe G r est sans cycle (cest donc bien une foret de G) ; a` la fin
de la procedure, elle est bien maximale pour linclusion car, en ajoutant un arc vert quelconque
a` Gr , on cree un cycle.
On peut egalement facilement demontrer les proprietes suivantes :
Si G poss`ede n sommets et p composantes connexes, une foret maximale de G comporte
exactement n p arcs.
Soit T = (X, T ) une foret maximale de G = (X, A). Alors T et G ont le meme nombre de
connexite.
Soit T = (X, T ) une foret maximale de G = (X, A). Alors, par tout arc a T = A T , il
passe un cycle et un seul a dont tous les arcs (autres que a) appartiennent a` T .
Cette derni`ere propriete est importante car elle permet de construire une base de cycles dun
graphe G (voir 4.5).
Soit un graphe G = (X, A) comportant n sommets, m arcs et p composantes connexes. Soit
T = (X, T ) une foret maximale de G = (X, A) et pour a T = A T , notons a le cycle
(unique) contenu dans T + {a}. Les cycles { a } forment une base de cycles du graphe G, dont
la dimension est le nombre cyclomatique de G.
La notion darborescense est ladaptation de la structure darbre aux 1-graphes orientes.
D
efinition 20
Un graphe G est une arborescence sil existe un sommet R appele racine de G tel
que, pour tout sommet S de G, il existe un chemin et un seul de R vers S.
La notion darborescence couvrante se definit comme celle darbre couvrant, mais elle est
plus delicate car il faut trouver une racine (qui nexiste pas toujours).

7.2

Arbres couvrants de poids minimum

Considerons le probl`eme qui consiste a` relier n villes par un reseau cable de la mani`ere la plus
economique possible. On suppose connue la longueur l ij = l(aij ) la longueur de cable necessaire
pour relier les villes i et j. Le reseau doit evidemment etre connexe et il ne doit pas admettre de
cycles pour etre de co
ut minimal ; cest donc un arbre et ce doit etre larbre maximum le plus
economique.
Le probl`eme a` resoudre se pose donc dans les termes suivants :
D
efinition 21
Soit un graphe non oriente G, connexe, pondere par une fonction positive l attachee
aux aretes. Soit un arbre couvrant T = (X, B) defini comme graphe partiel de G
avec un ensemble daretes B. Son poids (ou co
ut) total est :

25

l(T ) =

l(a)

aB

On dit que T est un arbre couvrant de poids minimal de G si l(T ) est minimal parmi
les poids de tous les arbres couvrants possibles de G.
On peut montrer que si toutes les aretes sont de poids differents, larbre couvrant de poids
minimal est unique. Plusieurs algorithmes ont ete proposes pour resoudre ce probl`eme. Les plus
simples sont les algorithmes de Prim et de Kruskal.
Lalgorithme de Prim consiste a` batir progressivement un arbre a` partir dun sommet quelconque (arbitrairement le sommet numero 1) et en y greffant, a` chaque etape, larete de poids
minimal parmi celles qui permettent de maintenir un graphe partiel qui soit un arbre. Si le
graphe est connexe, le processus sarrete avec un arbre couvrant. Sinon, il aboutit a` un arbre
couvrant pour une composante connexe ; on poursuit avec les autres composantes connexes pour
obtenir une foret couvrante.
Plus precisement, on construit progressivement, a` partir du sommet numero 1, un sousensemble de sommet S X contenant {1} et un sous-ensemble T A tel que le graphe partiel
(S, T ) soit un arbre de poids minimal du sous-graphe engendre par S. Pour cela, a` chaque etape,
on selectionne dans le cocycle :
(S) = {(k, l) | (k, l) A, k S, l X\S}
larete de poids minimal, soit a = (i, j). Les sous-ensembles S et T sont alors augmentes en leur
ajoutant le sommet j et larete a respectivement : S S {j}, T T {a}.
La mise en uvre de cet algorithme peut se faire aisement a` laide dune procedure de marquage de la facon suivante. On associe, a` chaque sommet i, un nombre reel (i) appele marque du
sommet i. A une etape quelconque, la marque (i) dun sommet i X\S represente le poids de
larete de poids minimal dans lensemble des aretes joignant i a` S. Dautre part, on conserve dans
un tableau lindice (i) de larete ayant permis dattribuer au sommet i, la marque (i). Ces
informations permettent aisement dobtenir, a` letape courante, larete de poids minimal dans le
cocycle (S) : il suffit en effet de determiner le sommet i X\S ayant une marque minimale et
larete cherchee est (i). Par ailleurs, lorsque le sous-ensemble S est augmente du sommet i, les
marques sont mises a` jour en examinant toutes les aretes issues de i et dont lautre extremite j ne
fait pas encore partie de larbre (j X\S) et en effectuant la substitution (j) min((j), l ij ).
Chaque fois quune marque est amelioree, le tableau est mis a` jour. Si le graphe est connexe,
lalgorithme sarrete lorsque S = X (tous les sommets ont ete integres a` larbre). Les elements du
tableau representent alors les indices des aretes constituant larbre couvrant de poids minimal.
Algorithme 3 (Prim)
Recherche dun arbre couvrant de poids minimal.
(a) - Initialisations
(1) = 0
(i) = , i {2, 3, . . . , n}
(i) = , i {1, 2, . . . , n}
S=
26

(b) - Selectionner i tel que (i) = min ((j))


jX\S

Si (i) = ou S = X alors FIN


S S {i}
(c) - Pour toutes les aretes a = (i, j) telles que j X\S faire
Si lij < (j) alors (j) = lij , (j) = a
Retourner en (b)
r
Lannexe C presente une implementation Matlab
de cet algorithme et les resultats obtenus
sur un exemple.

Le probl`eme de loptimisation du choix dune arborescence couvrante est plus difficile que
pour les arbres couvrants parce quil faut verifier que le sommet choisi au depart est bien racine
de larbre. Plusieurs algorithmes ont ete developpes pour resoudre ce probl`eme ; nous ne les
decrirons pas ici.

8
8.1

R
eseaux, r
eseaux de transport et probl`
emes de flots
D
efinitions

D
efinition 22
Un graphe fortement connexe, sans boucle et ayant plus dun sommet, est appele un
reseau.
On appelle nud dun reseau un sommet qui a plus de deux arcs incidents. Les autres
sommets sont appeles antinuds.
On appelle branche tout chemin pour lequel seuls les premiers et derniers sommets
sont des nuds.
Dans un graphe oriente G, un flot est laffectation dune valeur reelle a` chaque arc de G,
representant une quantite transportee sur cet arc, de telle sorte que, en chaque sommet, la
somme des flots entrants soit egale a` la somme des flots sortants (loi de Kirchhoff : conservation
des flux en chaque sommet).
Parmi les probl`emes les plus classiques, on peut citer celui de la recherche dun flot maximal. On se donne une capacite maximale sur chaque arc qui sera une borne superieure du flot
autorise sur cet arc. Le probl`eme du flot maximal consiste a` determiner un flot dont la valeur
en un certain lieu est maximale. On peut, de plus, se donner un co
ut de transport dune unite
de flot sur chaque arc et chercher le flot maximal de co
ut minimal.
D
efinition 23
On appelle reseau de transport un graphe oriente antisymetrique value G = (X, A, C),
sans boucle et dans lequel il existe :
un sommet x1 sans predecesseur (cest-`a-dire 1 (x1 ) = ) nomme entree ou
source du reseau,
un sommet xn sans successeur (cest-`a-dire (x n ) = ) nomme sortie ou puits du
reseau,

27

et tel quau moins un chemin unisse x 1 a` xn dans G.


La fonction de ponderation C est supposee positive et lon nomme capacite de larc
a le nombre C(a).
D
efinition 24
+
Si lon designe par A
x lensemble des arcs sortants du sommet x et A x lensemble
des arcs entrants de ce meme sommet x, on dit quune fonction (a) definie sur A
et a` valeurs reelles est un flot pour le reseau de transport si :
il est positif : (a) > 0, a A,
il verifie la loi des nuds de Kirchhoff :
X
X
(a)
(a) = 0,
aA
x

x 6= x1 et x 6= xn

aA+
x

il ne depasse pas la capacite des arcs : (a) C(a), a A.


Si x nest ni x1 ni xn , la quantite entrante en x doit etre egale a` la quantite sortante que
nous designons par x :
X
X
x =
(a) =
(a)
aA+
x

aA
x

Si est un flot sur un reseau de transport G, alors on a x1 = xn ; cette quantite sappelle


la valeur du flot.
La principale question qui se pose pour un reseau de transport donne est de determiner un
flot de valeur maximale ainsi que les flots le long de chaque arc. Il arrive frequemment egalement
que lon doive considerer des reseaux avec des capacites localisees non seulement sur les aretes
mais egalement sur les sommets. Cest notamment le cas pour les reseaux telephoniques pour lesquels la limite de capacite est autant due aux lignes quaux centraux. On peut ramener aisement
ce probl`eme au precedent ; il suffit de dedoubler chaque sommet en une entree et une sortie liees
par un arc ayant pour capacite celle quon attribuait precedemment au sommet.
Dans ce qui suit, les valeurs des flots et des capacites sont considerees comme enti`eres. Si
lon ne peut pas se ramener directement a` cette situation, on approche les valeurs reelles par
des rationnels, on reduit ces nombres au meme denominateur commun d et lon choisit comme
unite de reference 1/d.

8.2

Recherche dun flot complet

D
efinition 25
Pour un flot dans un reseau de transport G = (X, A, C), on dit quun arc est
sature si on a (a) = C(a).
Le flot est dit complet si tout chemin allant de x 1 a` xn contient au moins un arc sature.
Si lon consid`ere le graphe partiel engendre par les arcs non satures par le flot et si le flot nest
pas complet, il existe necessairement un chemin allant de lentree a` la sortie. On peut alors
definir un nouveau flot pour le reseau en augmentant de 1 le flot de chacun des arcs constituant le
chemin ; la valeur du flot est alors egalement augmentee de 1. On peut donc progressivement
28

augmenter la valeur dun flot incomplet jusqu`a ce quil soit complet. En tenant compte des
differences entre les capacites et la valeur du flot sur les arcs de , on peut connatre davance
laugmentation possible du flot. Cependant, le flot complet ainsi obtenu nest pas, en general, le
flot maximal.

8.3

Am
elioration du flot

Soit un flot complet. On va utiliser une procedure iterative pour identifier et marquer tous
les sommets du graphe o`
u il est possible de faire transiter une unite de flot supplementaire.
On definit un processus detiquetage de certains sommets du graphe. En x 1 , on place une
etiquette + . Soit x un sommet dej`a marque :
on marque avec une etiquette +x tout successeur y non marque de x pour lequel le flot
nest pas a` son maximum ((x, y) A et (x, y) < C(x, y)).
on marque avec une etiquette x tout predecesseur y non marque de x pour lequel le
flot nest pas nul ((x, y) A et (y, x) > 0).
Letiquette a pour role de donner le nom dun predecesseur ou dun successeur dun sommet
donne en indiquant si le flot peut etre augmente dans le sens de parcours (etiquette +x ) ou
diminue sil est dans le sens contraire (etiquette x ).
Si lon parvient jusquau marquage du sommet x n avec cette procedure, cest quil existe une
chane de x1 a` xn dont tous les sommets sont marques avec lindice du sommet precedent au
signe pr`es. Notons que lon est pas oblige de marquer tous les sommets (tous les successeurs ou
predecesseurs dun sommet donne) ; lobjectif etant simplement delaborer une chane marquee
de x1 a` xn .
Soit alors :
0
si a
/
(a) = (a)
0 (a) = (a) + 1 si a et si a est orientee dans le sens de
0
(a) = (a) 1 si a et si a est orientee dans le sens contraire de
0

On verifie aisement que 0 est encore un flot. Comme xn = xn + 1, la valeur du flot est
superieure, donc meilleure que celle de .
On peut alors systematiser lidee precedente en introduisant la notion de graphe decart ou
reseau residuel.
D
efinition 26
Soit un reseau de transport G = (X, A, C) possedant un flot complet . On appelle

graphe decart ou reseau residuel, le reseau G()


= (X, A, C) tel que :
si a A et (a) < C(a) alors a A et C(a) = C(a) (a)
si a = (x, y) A et (a) > 0 alors a1 = (y, x) A et C(a1 ) = (a)
Le reseau residuel indique le long de quels arcs on peut augmenter ou diminuer le flot.
Linteret du graphe decart apparat dans le theor`eme suivant.

29

Th
eor`
eme 4

Soit un flot de G (de x1 a` xn ) et G()


le reseau residuel associe a` . Une condition necessaire et suffisante pour que le flot soit maximal est quil nexiste pas de

chemin de x1 a` xn dans G().


La demonstration de ce theor`eme sappuie sur le lemme des arcs colores de Minty que nous
ne detaillerons pas ici.

8.4

Recherche dun flot maximal : algorithme de Ford et Fulkerson

A partir des resultats precedents, on peut maintenant proposer une methode constructive de
recherche dun flot maximal.
Algorithme 4 (Ford et Fulkerson)
Recherche dun flot maximum.
(a) - Iteration k = 0
Partir dun flot initial 0 (compatible avec les contraintes de capacite),
par exemple 0 = (0, 0, . . . , 0).
(b) - A literation k, soit k le flot courant.
k ).
Rechercher un chemin k de x1 a` xn dans le graphe decart G(
Sil nen existe pas, FIN : le flot k est maximal.
(c) - Soit k la capacite residuelle du chemin k
(minimum des capacites residuelles des arcs du chemin).
Definir le flot k+1 par :
 k+1
a = ka + k si a et si a est orientee dans le sens de
k+1
= ka k si a et si a est orientee dans le sens contraire de
a
Faire k k + 1 et retourner en (b).
Par definition du graphe decart, les flots k sont tous compatibles avec les capacites. Par
ailleurs, k est positif a` chaque iteration et, par suite, lalgorithme produit une sequence de flots
compatibles de valeurs strictement croissantes.
A chaque etape, la methode consiste donc a` rechercher une chane joignant x 1 a` xn . Il
est evident que le choix dune telle chane nest pas unique. Plusieurs travaux ont tente de
systematiser ce choix afin dameliorer les performances moyennes de lalgorithme.

8.5

Exemple trait
e manuellement

On consid`ere le graphe de la figure 11 (les nombres associes aux arcs representent les capacites), pour lequel on cherche a` determiner un flot maximal entre le sommet 1 et le sommet 7.
Toutes les composantes du flot initial sont considerees nulles 0 = (0, 0, . . . , 0) (figure
0 ) est represente figure 12b.
12a) ; le graphe decart G(
Le chemin choisi est trace en pointilles, sa capacite residuelle vaut 1 = min(5, 4, 7) = 4.
On augmente donc de quatre le flot sur les arcs composant le chemin (ils sont tous orientes
30

4
2

5
1

2
5

8
3

7
3

2
6

Fig. 11 Graphe oriente elementaire


4

0
2

0
1

0
5

0
3

4
0

5
1

Fig. 12 Flot initial et graphe decart


1 ), tous deux
positivement). On obtient un nouveau flot 1 , ainsi que son graphe decart G(
representes aux figures 13a et 13b.

4
2

4
1

0
5

4
3

1
3

7
3

2
6

Fig. 13 Flot a` literation numero 1 et graphe decart


Le nouveau chemin est toujours represente en traits pointilles. Cette fois, sa capacite residuelle
vaut 2 = min(1, 2, 3) = 1. Le nouveau flot 2 et le graphe decart correspondant sont donnes a`
la figure 14.
En poursuivant ainsi lalgorithme, on obtient les situations decrites aux figures 15 et 16.
Apr`es literation numero 4, on constate quil nexiste plus de chemin joignant le sommet 1 au
sommet 7 dans le graphe decart. Lalgorithme sach`eve donc et le flot maximal est celui obtenu
lors de cette derni`ere etape 1 = 7 = 9.

31

4
2

5
1

0
3

4
3

1
3

Fig. 14 Flot a` literation numero 2 et graphe decart

4
2

5
1

2
3

6
3

4
3

2
2

3
3

Fig. 15 Flot a` literation numero 3 et graphe decart

4
2

5
1

1
5

4
3

2
2

4
3

1
6

3
2

Fig. 16 Flot a` literation numero 4 et graphe decart


Notons egalement que lalgorithme peut etre adapte au cas o`
u les capacites des arcs ont
des bornes inferieures non nulles (positives, voire meme negatives). En pratique, on associe a` la
plupart des reseaux de transport, une notion de co
ut unitaire du transport qui se traduit par
lassociation, a` chaque arc a du reseau, dun nombre reel w(a) representant ce co
ut unitaire. Le
co
ut total dun flot est defini comme la somme des co
uts associes aux flots elementaires :
W () =

w(a)(a)

aA

On peut alors se poser le probl`eme consistant a` rechercher, parmi les flots a` valeur maximale,
celui qui est a` co
ut minimal. Lalgorithme de Ford et Fulkerson peut egalement etre adapte a`
cette situation.
32

8.6

Recherche dun flot maximal `


a co
ut minimal

La recherche dun flot maximal a` co


ut minimal peut etre resolue a` laide de lalgorithme de
Busacker-Gowen qui permet de determiner la famille compl`ete de tous les flots de co
ut minimal
dun sommet x1 a` un sommet xn et de valeur = 1, 2, ..., v. Nous enoncons ici cet algorithme
iteratif sous forme litterale et laissons le soin au lecteur den effectuer une description plus informatique.
A literation numero k, le flot courant k est suppose etre un flot de valeur k0 et de co
ut
k
minimal parmi lensemble de tous les flots de valeur 0 .
k ) le graphe decart relatif a` k ; on attribue aux arcs de G(
k ) les co
Soit G(
uts w
et les
capacites c suivantes :
si a = (xi , xj ) A et (a) < c(a), larc a+ = (xi , xj ) a un co
ut w(a)

= w(a) et une
capacite c(a) = c(a) (a) > 0,
ut w(a)

= w(a) et une capacite


si a = (xi , xj ) A et (a) > 0, larc a = (xj , xi ) a un co
c(a) = (a).
Soit alors k un chemin de co
ut minimal relativement aux co
uts w
entre x 1 et xn sur le
k ) ; on note k la capacite residuelle de ce chemin. On definit alors le flot
graphe decart G(
k+1 comme dans lalgorithme de Ford-Kulkerson. Si est le vecteur associe au chemin k
(cest-`a-dire tel que a = 1 si a+ k et a = 1 si a k ), on a k+1 = k + k et le flot
k+1 est un flot de co
ut minimal de valeur k0 + k .
On notera qu`a chaque iteration, on doit rechercher le plus court chemin (au sens du chemin
de co
ut minimal) de x1 a` xn dans un graphe o`
u la longueur (le co
ut) des arcs peut etre negative ;
il conviendra donc demployer un algorithme adapte a` cette situation (lalgorithme de Dijkstra
ne convient pas). Il existe cependant une amelioration de cet algorithme proposee par Edmonds
et Karp et basee sur une technique de modification des co
uts permettant de les rendre tous
positifs en conservant cependant la meme hierarchie de chemin sur le graphe decart ; dans cette
situation lalgorithme de Dijkstra peut etre utilise.

Couplages

Les probl`emes de couplage dans les graphes quelconques (ou dans les graphes bipartis) ont
un double interet. Le premier, le plus evident, vient de leurs applications : ils generalisent directement les probl`emes daffectation et ils interviennent dans certains probl`emes importants
de la theorie de graphes : probl`emes de tournees, determination de plus courtes chanes dans
un graphe non oriente, etc. Le second, dordre theorique, vient de ce quils se rattachent a` une
classe de probl`emes de programmation lineaire en nombres entiers.
D
efinition 27
Etant donne un graphe simple non oriente G = (X, A), un couplage est un sousensemble daretes K A tel que deux aretes quelconques de K ne sont pas adjacentes.
Un sommet i X est dit sature par le couplage K A sil existe une arete de K
incidente a` i.
Un couplage K qui sature tous les sommets du graphe est appele couplage parfait.
Un couplage maximal est un couplage de cardinalite maximale.
33

9.1

Le probl`
eme du couplage maximal

D
efinition 28
Si K A est un couplage de G = (X, A), on appelle chane alternee (relativement a`
K) une chane elementaire de G dont les aretes appartiennent alternativement a` K
= A K.
et K
Une chane alternee augmentante ou chane ameliorante est une chane alternee joignant deux sommets insatures.
= AK
En convenant de dessiner les aretes dun couplage par des traits epais, les aretes de K
restant en traits fins, une chane alternee est une chane elementaire dont les aretes sont alternativement fines et epaisses.
D
efinition 29
Etant donne un couplage K A, considerons une chane alternee L dont chaque
extremite est un sommet insature ou est telle que lunique arete de K qui lui est
incidente soit dans L. Alors le couplage K 0 obtenu en echangeant le role des aretes
fines et epaisses le long de la chane L est encore un couplage de G. Cette operation
qui fait passer du couplage K au couplage K 0 est appelee transfert le long de la
chane alternee L.
Une operation de transfert le long dune chane alternee augmentante, augmente la cardinalite du couplage dune unite.
Par exemple, sur le graphe de la figure 17, les aretes (2, 3) et (5, 6), dessinees en traits epais,
forment un couplage K de cardinalite egale a` 2. La chane L = {1, 2, 3, 4} est une chane alternee
dont les extremites sont des sommets insatures. Cest donc une chane alternee augmentante.
Un transfert le long de cette chane produit le nouveau couplage K 0 = {(1, 2), (3, 4), (5, 6)} de
cardinalite egale a` 3.

2
1

2
1

4
3

5
4

Fig. 17 Couplages initial et final


Pour cet exemple particulier, ce couplage est maximal, car, pour un graphe dordre n, la
cardinalite dun couplage maximal est egale a` la partie enti`ere de n/2.
Le theor`eme suivant permet de caracteriser un couplage maximal.
Th
eor`
eme 5
Un couplage K est maximal si et seulement sil nexiste pas de chane alternee augmentante relativement a` K.

34

Ce theor`eme montre que pour rechercher un couplage maximal, il suffit donc de savoir trouver
une chane alternee augmentante (sil en existe) relativement a` un couplage K A quelconque.
La procedure pour construire un couplage maximal K pour G = (X, A) est la suivante :
1. Initialiser K =
2. Trouver un chane ameliorante K a de K, effectuer le transfert le long de cette chane
et remplacer le couplage K par celui ainsi obtenu (dont la cardinalite a necessairement
augmente de un).
3. Repeter letape 2 jusqu`a ce quil ne soit plus possible de creer une nouvelle chane
ameliorante ; K est alors un couplage maximal.
Le probl`eme qui se pose alors est de savoir construire, pour un couplage donne, une chane
alternee augmentante. Pour rechercher des chanes alternees dorigine fixee i 0 , on construit un
arbre alterne T de racine i0 tel que :
T = (Y, T ) est un sous-graphe partiel connexe et sans cycle de G,
pour tout j Y , la chane (unique) L T (j) de larbre entre i0 et j est une chane alternee,
les chanes reliant i0 aux sommets pendants ont un nombre pair daretes.
Nous ne detaillerons pas ici les multiples situations particuli`eres auxquelles on peut etre
confrontes dans la construction de cet arbre. Nous nous contenterons de decrire la situation la
plus courante.
On choisit tout dabord comme racine de larbre (niveau 0) un sommet insature relativement
au couplage courant. Au niveau i impair, on ins`ere dans larbre un sommet adjacent a` lun des
sommets inseres au niveau i 1 par le biais dune arete nappartenant pas au couplage courant, ainsi que cette arete. Au niveau i pair, on ins`ere dans larbre alterne, un sommet adjacent a`
lun des sommets inseres au niveau i1 par le biais dune arete appartenant au couplage, ainsi
que cette arete. On continue a` construire progressivement cet arbre jusqu`a linsertion, a` un niveau impair, dun sommet insature, ou bien jusqu`a ce que lon ne puisse plus inserer de sommet.
Sil existe une chane alternee augmentante du couplage courant, on finit necessairement par
inserer un sommet insature s. La chane reliant s a` la racine de larbre est alors une chane
alternee augmentante.
Considerons le graphe biparti de la figure 18 o`
u lon a materialise, a` laide daretes epaisses,
le couplage obtenu apr`es une etape determinee de lalgorithme precedent.

f5

f4

f3

f2

f1

x5

x4

x3

x2

x1

Fig. 18 Couplage courant

35

Choisissons de construire un arbre alterne dont la racine est le sommet x 1 insature par ce
couplage.

f4
x1

f5

x3

x5

f1
f3

x2
f2

Fig. 19 Arbre alterne de racine x1


Au niveau 1 de larbre, la seule possibilite est dinserer larete (x 1 , f5 ) et le sommet f5 . Au
niveau 2, on ins`ere larete (f5 , x5 ) appartenant au couplage (cest encore la seule possibilite). Au
niveau 3, les deux aretes (x5 , f3 ) et (x5 , f4 ) nappartenant pas au couplage peuvent etre inserees.
On ins`ere ensuite les aretes (f4 , x3 ) et (f3 , x2 ), ainsi que les sommets (satures) correspondants.
Le sommet x3 est alors un sommet pendant de larbre, en revanche, on peut inserer, au niveau
5, les aretes (x2 , f1 ) et (x2 , f2 ) conduisant a` larbre alterne de la figure 19.
Comme les sommets f1 et f2 sont tous deux insatures, on a ainsi cree deux chanes ameliorantes
qui permettent daugmenter, en effectuant un transfert, la cardinalite du couplage. Si lon choisit
par exemple, la chane f1 , x2 , f3 , x5 , f5 , x1 ), le nouveau couplage est represente figure 20.

f5

f4

f3

f2

f1

x5

x4

x3

x2

x1

Fig. 20 Couplage augmente


Pour cet exemple particulier, on observe quil suffit dajouter a` ce dernier couplage larete
(x4 , f2 ), reliant les deux seuls sommets insatures, pour obtenir un couplage parfait qui est, bien
s
ur, un couplage maximal du graphe.

9.2

Couplage maximal et flot maximal

Pour determiner un couplage maximal sur un graphe biparti G = (X, Y, ), on peut recourir a` lartifice suivant. On construit un reseau de transport (voir definition 23) en ajoutant au
graphe une origine S liee a` tous les sommets de X et une destination P liee a` tous les sommets
de Y (voir figure 21). On fixe a` 1 les capacites de tous les arcs de ce reseau.
Un couplage permet de selectionner un certain nombre daretes du graphe biparti. Si lon fait
passer une unite de flot par ces aretes et sur les aretes correspondantes vers S et P (en faisant
passer un flot nul sur les autres aretes), on obtient bien un flot sur le reseau. En effet, la loi de
36

Kirchhoff en un sommet quelconque de X ou de Y exprime ici quil y a au plus une arete du


couplage y parvenant. Reciproquement, un flot sur ce reseau ne peut transporter au plus quune
unite de flot sur chaque arete et lensemble des aretes transportant une unite de flot entre X et
Y determine un couplage sur G. En effet, si deux aretes retenues etaient adjacentes en x X,
la loi de Kirchhoff en x imposerait un flot de deux unites au moins sur larc entre S et x, ce qui
depasse la capacite imposee. La valeur du flot est donc egale au nombre daretes constituant le
couplage.
Le probl`eme du couplage maximal se ram`ene ainsi a` un probl`eme de flot maximal dans un
reseau de transport, qui peut etre resolu a` laide de lalgorithme de Ford-Fulkerson. La figure
21 (partie gauche) montre un flot complet et non maximal qui peut etre ameliore en un flot
maximal (partie droite).

x1

y1

x1

y1

x2

y2

x2

y2

x3

y3

x3

y3

x4

y4

x4

y4

x5

y5

x5

y5

Fig. 21 Flot complet et maximal

9.3

Couplage de poids maximal

A chaque arete a A du graphe G(X, A), on associe maintenant un nombre reel w(a) appele poids de larete a. Le poids
P dun couplage K A est la somme des poids des aretes qui
le constituent, soit w(K) = aK w(a). Le probl`eme du couplage de poids maximal est la recherche dun couplage tel que son poids soit maximal sur lensemble de tous les couplages de G.
On remarquera quun couplage de poids maximal nest pas necessairement un couplage maximal
(couplage de cardinalite maximale).
D
efinition 30
Soit K A un couplage de G = (X, A), on rappelle quune chane alternee augmentante est une chane alternee joignant deux sommets insatures.
Une chane alternee reductrice est une chane alternee impaire dont les aretes extremes
sont dans K.
Une chane alternee conservative est une chane alternee paire dont une extremite
est un sommet isole.
On remarquera de mani`ere evidente que le transfert le long dune chane alternee augmentante augmente la cardinalite du couplage dune unite ; le long dune chane reductrice, il la
reduit dune unite et le long dune chane conservative, il ne la change pas.
37

D
efinition 31
Le co
ut reduit dune chane alternee L (augmentante, reductrice ou conservative)
relative au couplage K vaut :
w(L K)
(L) = w(L K)
Un cycle alterne pair est une chane alternee paire dont les extremites concident.
Un transfert le long dun cycle alterne pair conserve la cardinalite du couplage.
Le co
ut reduit du cycle est :
w( K)
(L) = w( K)
Le resultat suivant caracterise un couplage de poids maximal en termes dexistence de chanes
alternees.
Th
eor`
eme 6
Un couplage K est de poids maximal si et seulement sil nexiste pas de chane alternee, ni de cycle alterne pair de co
ut reduit strictement positif relativement a` K.
Le theor`eme ci-dessous montre que lon peut construire, de proche en proche, des couplages
K1 , K2 , ..., Kp de cardinalite 1, 2, ..., p et de poids maximal, par des transferts successifs le long
de chanes alternees augmentantes et de co
ut reduit maximal. On generalise ainsi le resultat de
Busacker-Gowen sur la recherche de flot maximal de co
ut minimal.
Th
eor`
eme 7
Soit K un couplage de cardinalite p de poids maximal (sur lensemble des couplages
de cardinalite p) et soit L une chane alternee augmentante (relativement a` K) de
co
ut reduit maximal. Le couplage K 0 obtenu a` partir de K par transfert le long de
L est de poids maximal parmi tous les couplages de cardinalite p + 1.

9.4

Probl`
emes daffectation

La formulation generale dun probl`eme daffectation est la suivante. Etant donne n taches a`
realiser et n machines pour les realiser et sachant que lon connat le co
ut de realisation C ij de
la tache ti par la machine mj (pour tous les couples (ti , mj ) possibles, si la tache ti ne peut etre
effectuee par la machine mj , on pose Cij = ), on cherche une permutation de {1, 2, . . . , n}
conduisant a` un co
ut total :
n
X
Ci,(i)
i=1

minimum (sur lensemble de toutes les n! permutations possibles).


Le probl`eme daffectation est un cas particulier du probl`eme de transport (sans capacite).
Il peut egalement etre vu comme un probl`eme de couplage parfait de poids minimum dans un
graphe biparti.
Cependant, compte-tenu de limportance de ce type de probl`eme, un algorithme specifique
a ete propose par Kuhn ; il sagit de lalgorithme Hongrois.

38

Cet algorithme repose essentiellement sur la constatation suivante. On ne change pas la ou


les solutions optimales en augmentant ou en diminuant dune meme quantite tous les elements
dune meme ligne (ou dune meme colonne) de la matrice des C ij (les valeurs infinies restant
infinies). Apr`es une telle operation, la valeur totale est augmentee ou diminuee de .
Par consequent, si lon fait apparatre, par des transformations de ce type, suffisamment de
zeros dans le tableau, mais pas de co
uts negatifs, et quil existe n zeros independants (cesta`-dire un seul zero dans chaque ligne et dans chaque colonne), on aura alors trouve laffectation
optimale.
Lalgorithme proc`ede en trois phases successives. Afin dexpliquer la demarche suivie, considerons lexemple decrit par la matrice des co
uts suivante :

1
7

6 8

2
3
5

D 11 4
E 4

3
5
1

4 5
7 10
5

11 15
5

2 10

Premi`ere phase : obtention de valeurs nulles


A tous les elements de chacune des colonnes, on enl`eve le plus petit element de cette colonne,
puis, dans la matrice ainsi obtenue, on enl`eve, a` tous les elements dune meme ligne, le plus petit
element de la ligne. On obtient de la sorte une matrice (C 1,ij ) ayant au moins un zero par ligne
et par colonne.
Pour lexemple precedent, on obtient, apr`es traitement des colonnes puis des lignes, les deux
matrices suivantes :

1
1

4
5

5
3

0 6

C
D

2
0

3
4

E 1

3
0

1
1

2
0

3
4

4
5

5
3

0 6

E 1

8
4

3
0

Deuxi`eme phase : recherche du maximum daffectations possibles


A partir de la matrice (C1,ij ), on cherche a` former une solution de co
ut nul (un seul zero dans
chaque ligne et dans chaque colonne). Si cest le cas, on a la solution optimale, sinon on cherche
un ensemble maximum de zeros independants : ceci revient a` chercher un flot maximal sur le
graphe G0 constitue par les arcs de co
ut (reduit) nul. Sur la matrice C 1,ij , cela correspond au
traitement suivant. On consid`ere la ligne ayant un nombre minimal de zeros (pour lexemple,
cela peut etre la premi`ere). On encadre lun des zeros de cette ligne (ici, C 1,A2 ), puis on barre les
zeros qui se trouvent sur la meme ligne ou la meme colonne que le zeros encadre (ici, C 1,D2 ). On
proc`ede de meme pour toutes les lignes, en tenant compte des etapes precedentes. On obtient,
pour lexemple, la matrice suivante :
39

0 6

C
D

0 8

E 1

Troisi`eme phase : determination des affectations interessantes


Pour determiner ces affectations, on proc`ede la mani`ere suivante :
On marque (dune asterisque) toutes les lignes qui ne contiennent aucun zero encadre
sommet non affecte (ligne D de lexemple) ;
On marque les lignes qui ont un zero encadre dans une colonne marquee (ligne A de
lexemple) ;
On marque les colonnes qui ont un ou plusieurs zeros barres dans une ligne marquee
possibilite non exploitee (colonne 2 de lexemple).
On rep`ete ces trois marquages successifs jusqu`a ce que lon ne puisse plus effectuer de nouveaux marquages (pour lexemple, une seule passe suffit).
Les affectations interessantes a` considerer sont celles issues des sommets correspondant aux
lignes marquees ; on barre donc les lignes non marquees. Les sommets correspondant aux colonnes
marquees ne sont pas interessants car ils ne peuvent etre reaffectes ; on barre donc les colonnes
marquees.

1
1

4
5

5
3

0 6

C
D

2
0

3
4

E 1

Dans le tableau reduit ainsi obtenu (cases non barrees), on recherche ensuite lelement le plus
petit, necessairement non nul par construction (pour lexemple, il sagit de lelement C 1,A1 ) ; on
retranche sa valeur aux colonnes non barrees et on lajoute aux lignes barrees. On obtient les
tableaux successifs suivants :

5
2

B -1 5 -1

1
0

C -1
D

2
0

3
3

4
4

2 -1 2

E 1

3 -1

1
0

2
0

4
4

5
2

0 6

E 2

40

3
3

0 7
4

3
0

On note (C2,ij ) la matrice ainsi obtenue et lon poursuit la procedure de traitement en reprenant a` la seconde phase. Lorsquune solution optimale est obtenue (un zero par ligne et
par colonne), on arrete ; sinon on recommence et on definit successivement les matrices (C 3,ij ),
(C4,ij ), . . . , (Cn,ij ).
Sur le tableau (C2,ij ) de lexemple, on est amene a` encadrer C 2,D2 et barrer C2,A2 , encadrer
C2,E4 , encadrer C2,A1 et barrer C2,B1 et C2,C1 , encadrer C2,B5 et enfin encadrer C2,C3 :

1
0

4
4

5
2

0 6

C
D

2
0

3
3

E 2

La solution optimale est alors obtenue grace aux elements :


C2,A1 = C2,B5 = C2,C3 = C2,D2 = C2,E4 = 0


A B C D E
et a` la permutation =
.
1 5 3 2 4
Si lon revient aux donnees initiales, on obtient :
CA1 = CB5 = CC3 = CD2 = CE4 = 7 + 7 + 1 + 4 + 2 = 21
La figure 22 visualise en trait fort le couplage optimal obtenu.
2

5
4

Fig. 22 Affectation optimale

10

Probl`
emes dordonnancement

Lobjet dun probl`eme dordonnancement est de faciliter la mise en uvre et de guider


lexecution dun ensemble complexe de taches (programme de recherche ou de production, lancement dun produit, construction dun edifice ...). La technique danalyse la plus connue, appelee
methode PERT (Program Evaluation and Review Technique) a ete introduite aux Etats-Unis en
1958 pour la conduite du programme de recherche et de construction des fusees Polaris. Cette
41

methode tient une place dominante par sa simplicite, son efficacite et la variete dextensions qui
ont pu etre developpees.
En toute generalite, les probl`emes dordonnancement se posent sous la forme suivante. Etant
donne un objectif quon se propose datteindre et dont la realisation suppose lexecution prealable
de multiples taches, soumises a` de nombreuses contraintes, determiner lordre et le calendrier
dexecution des diverses taches.
Le crit`ere doptimalite peut porter sur la minimisation de la duree et/ou du co
ut de la
realisation du projet. Nous supposerons que le projet est decomposable en un nombre fini de
taches, caracterisees par leur duree dexecution (generalement fixe, parfois aleatoire), eventuellement aussi par leur co
ut dexecution, et soumises a` des contraintes de posteriorite stricte (une
tache ne peut commencer que si certaines autres taches sont compl`etement terminees). Ce type
de probl`eme se nomme probl`eme central de lordonnancement. Des cas plus complexes peuvent
egalement etre envisages comme par exemple le cas des contraintes disjonctives, cest-`a-dire le
cas o`
u, en plus des contraintes de succession, on impose la realisation non simultanee de certaines
paires de taches.
La representation par un graphe dun probl`eme dordonnancement permet une bonne apprehension globale du probl`eme. Letude de ce graphe conduit a` lidentification des taches prioritaires et la detection des retards ou des depassements de moyens afin de prendre les mesures
correctives necessaires.
Le probl`eme central de lordonnancement senonce comme suit : etant donne un projet
constitue de n taches de durees dexecution fixes et soumises a` des contraintes de posteriorite
stricte, determiner un calendrier dexecution ou ordonnancement qui minimise la duree de
realisation totale du projet.
En pratique, le travail preliminaire a` accomplir sera donc de dresser une liste des differentes
operations a` mener que lon decomposera plus ou moins finement selon la precision souhaitee.
Generalement, les taches sont definies pour que leurs durees dexecution soient du meme ordre
de grandeur ; de plus, les contraintes de posteriorite entre les taches doivent pouvoir etre etablies
avec precision. Ce travail important est souvent long et necessite une collaboration etroite entre
les differents acteurs du projet.

10.1

Le graphe potentiels-t
aches

A partir de la description des taches du projet, on construit le graphe suivant :


A chaque tache i (i de 1 a` n), on associe un sommet i du graphe,
On definit un arc entre i et j de longueur d i (la duree de la tache i) si la tache i doit
preceder la tache j.
On introduit deux sommets correspondant a` deux taches fictives de duree nulle, la tache
de debut des travaux , anterieure a` toutes les taches (il suffit de relier le sommet aux
sommets sans predecesseurs du graphe) et la tache de fin des travaux , posterieure a`
toutes les autres taches (tous les sommets sans successeur du graphe seront relies au sommet ).
Le graphe ainsi defini doit etre sans circuit ; en effet, dans le cas contraire, une operation
devrait se succeder a` elle-meme. Le travail commencant a` la date 0, on cherche un ordonnancement qui minimise la duree totale du projet, donc la date de fin des travaux. Pour quune tache
42

puisse commencer, il est necessaire que toutes les taches qui la relient a` la tache debut du projet
soient realisees.
D
efinition 32
La date au plus t
ot, ti de debut de la tache i est egale a` t i = maxj1 (tj + dj ),
i
cest-`a-dire que ti est egale a` la longueur du plus long chemin l(, i) de a` i.
La duree minimale du projet t est donc la longueur du plus long chemin de a` .
Si la duree minimale du projet est egale a` t , la date au plus tard pour commencer
la tache i est egale a` Ti = minji (Tj di ) avec T = t , ce qui montre que Ti =
t l(i, ) o`
u l(i, ) est la longueur du plus long chemin de i a` .
La marge totale Mi de la tache i est definie comme la difference entre la date au plus
tot et au plus tard (Mi = Ti ti ).
Les taches dont la marge est nulle sont appelees t
aches critiques. Si un quelconque
retard est pris sur la realisation de lune de ces taches, la duree minimale du projet
sera augmentee dautant.
La marge libre mi de la tache i est le delai dont on peut retarder cette tache sans affecter les dates de debut au plus tot des taches posterieures, m i = minji (tj ti di )).
On observe donc qu`a chaque tache i est associe un nombre t i qui peut etre considere comme
un potentiel do`
u la denomination de graphe potentiels-taches.

10.2

Le graphe potentiels-
etapes ou graphe PERT

Dans cette representation, les taches sont materialisees par les arcs du graphe. La longueur
de chaque arc est egale a` la duree d i de la tache correspondante. Le debut et la fin dune tache
constituent les etapes du projet. Comme precedemment, on introduit les deux etapes de debut
() et de fin () du projet.
Chaque etape est donc definie par un ensemble de taches dej`a effectuees. Si une tache j doit
succeder a` une tache i, on confondra lextremite initiale de larc a j (correspondant a` la tache
j) et lextremite terminale de larc a i (correspondant a` la tache i), via eventuellement un arc fictif.
Le graphe ainsi defini doit etre sans circuit. Dans cette formulation, les sommets sinterpr`etent
comme des etapes, cest pourquoi lon utilise lappellation graphe potentiels-etapes (connu plus
communement sous le nom de graphe PERT).
La construction dun tel graphe est un peu plus complexe que celle du graphe potentielstaches car elle demande la definition des etapes qui peuvent correspondre au debut o`
u a` la fin
des
t
a
ches
qui
doivent
de plusieurs taches. Si lon se donne, pour chaque tache i, lensemble 1
i
la preceder, les differentes etapes du projet correspondent aux differents ensembles 1
.
i
Soulignons aussi que pour pouvoir exprimer certaines contraintes de posteriorite stricte, il
est parfois necessaire dintroduire des taches fictives et donc des arcs fictifs de duree nulle. A
titre dexemple, considerons le sous-graphe partiel de la figure 23.
Ce graphe indique que les taches 3 et 4 doivent succeder aux taches 1 et 2. Supposons que
suite a` une modification de conditions techniques, lexecution de la tache 4 puisse commencer
43

Tche 1

Tche 3

Tche 2

Tche 4

Fig. 23 Element de graphe PERT


avant que ne soit achevee la tache 1. Pour adapter le graphe a` ce changement, on ajoute un arc
fictif comme sur la figure 24.
Tche 1

Tche 3

Tche fictive

Tche 2

Tche 4

Fig. 24 Element de graphe PERT

10.3

R
esolution

Un ordonnancement est un programme dexecution qui fixe la date t i de debut dexecution


de chacune des taches (dans la methode du potentiel) ou de debut de realisation de chacune des
etapes (dans la methode PERT). Un ordonnancement est optimal sil est realisable cest-`a-dire
si tj ti di et sil minimise la duree de realisation t du projet.
La duree minimale du projet est egale a` la longueur du plus long chemin de a` . En
effet, pour quune tache puisse commencer, il faut que toutes les taches precedentes aient ete
executees, de sorte que la duree du projet ne peut etre inferieure a` la somme des durees des
taches composant le chemin le plus long de a` . Ce chemin, appele chemin critique, nest pas
necessairement unique. Comme le graphe est sans circuit,on a :
tj = max (ti + di ),
i1
j

1jn

Chaque ti ainsi obtenu est la longueur du chemin le plus long du sommet au sommet i et
represente la date au plus tot de debut dexecution de la tache ou de letape i.
La duree minimum t du projet ayant ete determinee, il est bien s
ur possible de retarder
lexecution de certaines taches ou etapes sans pour autant accrotre t . Il est d`es lors interessant
de determiner les dates au plus tard T i de debut dexecution des differentes taches ou etapes i
sous la condition que la duree minimale du projet ne soit pas modifiee. Ces dates se calculent de
meme mani`ere que pour les dates au plus tot mais a` partir du graphe inverse obtenu en inversant
le sens de tous les arcs. Il vient T = t et :
Tj = min(Ti di ),
ij

44

0 j n1

Chaque quantite T Ti ainsi obtenue est la longueur du chemin le plus long du sommet i
au sommet .

10.4

Compl
ements

Pour comparer linteret des deux graphes precedemment decrits, il faut se placer dans un
cadre plus general que le probl`eme central de lordonnancement et examiner un ensemble de
contraintes que lon doit pratiquement prendre en compte dans les probl`emes dordonnancement.
Ces contraintes sont essentiellement de trois types :
Type potentiel : la tache j doit commencer apr`es la fin de i ou bien apr`es la moitie de la
realisation de i, ou bien un certain temps apr`es la fin de i, etc.
Type disjonctif : les taches i et j ne peuvent etre realisees en meme temps (car cest le meme
ouvrier qui les realise par exemple).
Type cumulatif : les moyens necessaires a` lexecution dun certain nombre de taches sont,
a` chaque instant, limites ; par exemple, le nombre de camions utilisables ou la somme
depensee pour les travaux realises a` linstant t ne doit pas depasser un certain seuil, etc.
Les contraintes de type potentiel autres que les contraintes danteriorite du probl`eme central
sont difficiles a` prendre en compte dans le graphe potentiels-etapes. On est en effet amene
a` ajouter des sommets et des arcs fictifs en tr`es grand nombre dans le graphe. En revanche,
dans le graphe potentiels-taches, chaque contrainte supplementaire de type potentiel sintroduit
simplement par ladjonction dun arc dans le graphe. Par exemple :
la contrainte : j ne doit pas commencer avant la moitie de la realisation de la tache i se
represente par un arc (i, j) de longueur d i /2.
la contrainte : j ne peut commencer quun temps t apr`es la fin de i se represente par un
arc (i, j) de longueur di + t.
la contrainte : j ne peut commencer quapr`es la date b j se represente par un arc (, j) de
longueur bj .
la contrainte : j doit commencer avant la date c j se represente par un arc (j, ) de longueur
cj .
enfin la contrainte : j doit suivre immediatement la tache i secrit t i + di = tj et se
represente par un arc (i, j) de longueur d i et un arc (j, i) de longueur di .
Les deux derniers cas introduisent des circuits et des arcs de longueurs negatives. La condition dexistence dun ordonnancement devient alors : il nexiste pas de circuit de longueur
strictement positive. Comme lon peut introduire des arcs de longueur differentes partant dun
sommet i quelconque, il est preferable de noter d ij la longueur de larc allant de i a` j. Les
formules de determination des dates au plus tot et au plus tard deviennent alors :
tj = max (ti + dij ) au lieu de

tj = max (ti + di )

Tj = min(Ti dij ) au lieu de

Tj = min(Ti di )

i1
j

ij

i1
j

ij

Les contraintes de type disjonctif ou cumulatif sont impossibles a` prendre en compte dans
le graphe PERT. Certains amenagements permettent leur prise en compte dans le graphe
potentiels-taches. On preferera donc la representation potentiels-taches d`es que le probl`eme
ne se reduit pas au probl`eme central.

45

Pour terminer cette presentation succincte des probl`emes dordonnancement, examinons


quelques exemples pouvant se formuler en termes du probl`eme du voyageur de commerce
ou de ses nombreuses variantes.
Exemple 1 : Dans un syst`eme dexploitation automatise, une machine doit reguli`erement effectuer n types de taches differentes x 1 , x2 , . . . , xn . On connat de plus des durees de commutations
entre deux taches xi et xj quelconques. Le probl`eme est de trouver une sequence de x i qui minimise le temps total des commutations. Si lon consid`ere le graphe de sommets {x i }i=1,...,n dont
larc (xi , xj ) a une longueur egale au temps de commutation entre x i et xj , le probl`eme revient
a` determiner un circuit hamiltonien de longueur minimum.
Dans beaucoup de situations, on cherche un chemin hamiltonien dans un graphe qui minimise une autre fonction economique que la longueur totale du chemin.
Exemple 2 : Etant donnees n taches i = 1, . . . , n de duree a i , soit di la date o`
u la tache i
doit etre terminee (date souhaitee). Determiner la sequence de taches sur une machine unique
de facon a` minimiser le retard maximum, cest-`a-dire minimiser max i=1,...,n (ti di ) o`
u ti est la
date o`
u la tache i est effectivement terminee. La solution optimale est obtenue en ordonnant les
t
aches i selon lordre croissant des dates souhaitees d i .
Exemple 3 : Etant donne un graphe oriente G = (X, A) et des poids C a = Ci,j sur chaque arc
a = (i, j), determiner une chane hamiltonienne qui minimise :

X
X

f () =
C(i)(j)
i=1,...,n

j>i

o`
u (i) represente le ii`eme sommet de la chane hamiltonienne.
Cela revient a` determiner, sur une matrice carree dordre n, C = (C ij ), une permutation
des lignes et des colonnes (la meme pour les lignes et les colonnes) telle que la somme des
elements de la matrice triangulaire superieure soit minimale.
Ce probl`eme a de nombreuses applications. La plus classique correspond a` lanalyse des
preferences : etant donne N objets, on demande a` k personnes de les comparer par paires (on
pose Cij , le nombre de personnes ayant preferees i a` j). Loptimum de f () est obtenu si la
chane hamiltonienne est constituee de la succession des sommets pris dans un ordre minimisant
le nombre de desaccords.

46

Annexe A - Impl
ementation de lalgorithme de Moore-Dijkstra
r
Le programme Matlab
ci-dessous est une implementation de lalgorithme de Moore-Dijkstra
decrit au paragraphe 6.3 et permettant lobtention du plus court chemin entre deux sommets.
Les trois param`etres dappel de la fonction moore sont les suivants :

dep

: matrice des longueurs (sil ny a pas darc entre le sommet i et le sommet j, alors
lij = et conventionnellement lii = 0).
: numero du sommet de depart du chemin recherche.

arv

: numero du sommet darrivee du chemin recherche.

En sortie, on recup`ere :
s

: la longueur du plus court chemin (s = sil nexiste pas de chemin).

: le vecteur des longueurs des plus courts chemins entre dep et tous les autres
sommets.

function [s,mark]=moore(L,dep,arv)
%MOORE Recherche du plus court chemin entre deux sommets dun graphe
%
%
S=MOORE(L,DEP,ARV) calcule la longueur du plus court chemin entre
%
les sommets de num
ero DEP et ARV.
%
%
[S,M]=MOORE(L,DEP,ARV) renvoie e
galement le vecteur des longueurs
%
des plus courts chemins entre le sommet DEP et tous les autres sommets.
%
%
Voir aussi MOORE1
%
%

Copyright (c) 2003 by Didier MAQUIN


$Revision: 0.1 $Date: 05/01/03 $

n=size(L,1);
% Initialisation
Sb=1:n;
Sb(dep)=[];
mark=L(dep,:);
while 1
[v,indj]=min(mark(Sb));
j=Sb(indj);
Sb(indj)=[];
if isempty(Sb),break,end
succ=find(L(j,:)~=inf & L(j,:)~=0);
A=intersect(succ,Sb);
if ~isempty(A)
mark(A)=min(mark(A),mark(j)+L(j,A));
end
end
s=mark(arv);

%
%
%
%
%
%
%

47

j sommet de marque provisoire minimale


on retire j de Sb
si Sb est vide on ar^
ete
liste des successeurs de j
intersection entre cette liste et Sb
si cette liste nest pas vide
on remet a
` jour les marques

Considerons le graphe de la figure 25 :

4
5

4
2

2
7

Fig. 25 Graphe oriente


Voil`a ci-dessous un exemple de programme dappel pour calculer les longueurs des plus courts
chemins joignant le sommet 1 a` tous les autres :
clear
% Matrice de distance
D=[ 0
7
1 inf inf inf
inf 0 inf 4 inf 1
inf 5
0 inf 2
7
inf inf inf 0 inf inf
inf 2 inf 5
0 inf
inf inf inf inf 3
0 ];
%
dep=input(Sommet de d
epart : );
arv=input(Sommet darriv
ee : );
[s,m]=moore(D,dep,arv)
Pour dep = 1 et arv = 6, on obtient :
Sommet de d
epart : 1
Sommet darriv
ee : 6
s =
6
m =
0
5
1

La fonction precedente peut etre modifiee de mani`ere a` memoriser, en plus de la longueur


du chemin, la succession des sommets par lesquels il passe. Il suffit pour cela de maintenir a` jour
une table de predecesseurs. Celle-ci peut ensuite etre exploitee pour reconstituer le chemin suivi.
r
ci-dessous realise cette fonction. Les trois param`etres dappel de la
Le programme Matlab
fonction moore1 sont identiques a` ceux de la fonction precedente. En sortie, on obtient :

s
: la longueur du plus court chemin (s = sil nexiste pas de chemin).
chemin : le vecteur des numeros de sommets decrivant le chemin.

48

function [s,chemin]=moore1(L,dep,arv)
%MOORE1 Recherche du plus court chemin entre deux sommets dun graphe
%
%
S=MOORE1(L,DEP,ARV) calcule la longueur du plus court chemin entre
%
les sommets de num
ero DEP et ARV.
%
%
[S,CHEMIN]=MOORE1(L,DEP,ARV) renvoie e
galement le chemin emprunt
e
%
(s
equence de num
ero de sommets).
%
%
Voir aussi MOORE
%
%

Copyright (c) 2003 by Didier MAQUIN


$Revision: 0.1 $Date: 05/01/03 $

n=size(L,1);
% Initialisation
Sb=1:n;
Sb(dep)=[];
mark=L(dep,:);
p=ones(1,n)*inf;
succ=find(L(dep,:)~=inf & L(dep,:)~=0);
p(succ)=dep;
while 1
[v,indj]=min(mark(Sb));
j=Sb(indj);
% j sommet de marque provisoire minimale.
Sb(indj)=[];
% on retire j de Sb.
if isempty(Sb),break,end
% si Sb est vide on ar^
ete.
succ=find(L(j,:)~=inf & L(j,:)~=0);% on cherche la liste des successeurs de j.
A=intersect(succ,Sb);
% intersection entre cette liste et Sb.
if ~isempty(A)
% si cette liste nest pas vide
oldmark=mark(A);
% on m
emorise lancienne marque
mark(A)=min(mark(A),mark(j)+L(j,A)); % et on remet a
` jour les marques.
id=find(oldmark~=mark(A));
% pour les sommets dont les marques ont
p(A(id))=j;
% chang
e on m
emorise le pr
ed
ecesseur.
end
end
s=mark(arv);
chemin=[];
if isfinite(p(arv))
chemin=[arv];
% on construit le chemin
while chemin(end)~=dep
% a
` laide de la table des pr
ed
ecesseurs
k=chemin(end);
% a
` partir de la fin.
chemin=[p(k) chemin];
end
end
Ci-dessous un exemple de programme dappel correspondant au graphe de la figure 25 :
clear
% Matrice de distance
D=[ 0
7
1 inf inf inf
49

inf 0 inf 4 inf 1


inf 5
0 inf 2
7
inf inf inf 0 inf inf
inf 2 inf 5
0 inf
inf inf inf inf 3
0 ];
%
dep=input(Sommet de d
epart : );
arv=input(Sommet darriv
ee : );
[s,chemin]=moore1(D,dep,arv);
if isfinite(s)
fprintf(Le chemin )
fprintf(%i ,chemin)
fprintf(de longueur %f ,s)
fprintf(est le chemin de longueur minimale\n)
else
fprintf(Il nexiste pas de chemin !\n)
end
Pour dep = 1 et arv = 6, on obtient :
Sommet de d
epart : 1
Sommet darriv
ee : 6
Le chemin 1 3 5 2 6 de longueur 6.000000 est le chemin de longueur minimale
Pour dep = 4 et arv = 3, on obtient :
Sommet de d
epart : 4
Sommet darriv
ee : 3
Il nexiste pas de chemin !

50

Annexe B - Impl
ementation de lalgorithme de Floyd
r
Le programme Matlab
ci-apr`es est une implementation de lalgorithme de Floyd decrit au
paragraphe 6.3 et permettant lobtention de la matrice des plus courts chemins dans un graphe
dont les arcs sont valuees positivement. Le seul param`etre dappel de la fonction floyd est le
suivant :

: matrice des longueurs (sil ny a pas darc entre le sommet i et le sommet j, alors
lij = et conventionnellement lii = 0).

En sortie, on recup`ere :
A

: la matrice des plus courts chemins entre tous les sommets.

: la matrice des predecesseurs (p ij represente le numero du sommet predecesseur


immediat de j sur le plus court chemin entre i et j).

function [A,P]=floyd(L)
%FLOYD Recherche de la matrice des plus courts chemins entre sommets
%
%
[A]=FLOYD(L) calcule a matrice des plus courts chemins entre sommets
%
%
[A,P]=FLOYD(L) renvoie e
galement la matrice des pr
ed
ecesseurs
%
%
%

Copyright (c) 2003 by Didier MAQUIN


$Revision: 0.1 $Date: 05/04/03 $

[n,m]=size(L);
if n ~= m error(La matrice des distance nest pas carr
ee);end
A=L;
for i=1:n
P(i,:)=i*ones(1,m);
end
for k=1:n
for i=1:n
for j=1:n
if A(i,k) + A(k,j) < A(i,j)
A(i,j) = A(i,k) + A(k,j);
P(i,j) = P(k,j);
end
end
end
end
Considerons de nouveau le graphe de la figure 25. Le programme ci-apr`es permet de calculer
la matrice des plus courts chemins et dediter, en exploitant la matrice des predecesseurs, le
chemin reliant un sommet initial a` un sommet terminal quelconques sous la forme dune liste de
sommets.

51

clear;
% Matrice de distance
C=[ 0
7
1 inf inf inf
inf 0 inf 4 inf 1
inf 5
0 inf 2
7
inf inf inf 0 inf inf
inf 2 inf 5
0 inf
inf inf inf inf 3
0 ];
%
[A,P]=floyd(C)
initial=input(Sommet initial : );
terminal=input(Sommet terminal : );
%
if ~isfinite(A(initial,terminal))
fprintf(Il nexiste pas de chemin entre les sommets %d et %d\n\n,initial,terminal);
else
j=terminal;
chemin=[j];
while j ~= initial
j=P(initial,j);
chemin=[j chemin];
end
fprintf(Plus court chemin entre les sommets %d et %d\n\n,initial,terminal)
fprintf(%d ,chemin);
fprintf(\n\n)
end

Pour initial = 1 et terminal = 6, on obtient :


Plus court chemin entre 1 et 6
1 3 5 2 6
Alors que pour initial = 6 et terminal = 1, le resultat est le suivant :
Il nexiste pas de chemin entre 6 et 1

52

Annexe C - Impl
ementation de lalgorithme de Prim
r
Le programme Matlab
ci-apr`es est une implementation de lalgorithme de Prim decrit au
paragraphe 7.2 et permettant lobtention dun arbre couvrant de poids minimal. Les deux param`etres dappel de la fonction prim sont les suivants :

L
dep

: matrice des longueurs (sil ny a pas darc entre le sommet i et le sommet j, alors
lij = et conventionnellement lii = 0).
: numero du sommet de depart pour la construction de larbre recherche.

En sortie, on recup`ere :
alpha

: un tableau de chanes de caract`eres designant les aretes constituant larbre.

function [alpha]=prim(L)
%PRIM Recherche dun arbre couvrant de poids minimal
%
%
ALPHA=PRIM(L) d
etermine un arbre couvrant de poids minimal
%
ALPHA est un tableau de cha^
nes de caract`
eres d
esignant les
%
ar^
etes de larbre.
%
%

Copyright (c) 2003 by Didier MAQUIN


$Revision: 0.1 $Date: 05/01/03 $

n=size(L,1);
mark=ones(1,n)*inf;
alpha=ones(n,3)*abs(-); % liste des ar^
etes de larbre
dep=1;
% sommet de d
epart (fix
e a
` 1)
mark(dep)=0;
A=[];
S=1:n;
while 1
S=setdiff(S,A);
% ensemble X\A
[val,l]=min(mark(S)); % recherche du sommet ayant la plus petite marque
i=S(l);
% num
ero du sommet
if isempty(setxor(A,1:n)),break, end % si A=X alors FIN
A=[A i];
% ajout du sommet a
` larbre
succ=find(L(i,:)~=inf & L(i,:)~=0); % successeurs du sommet i
E=setdiff(succ,A);
% liste des successeurs moins les sommets d
ej`
a dans S
for k=1:length(E)
% mise a
` jour des marques
if L(i,E(k))<mark(E(k))
mark(E(k))=L(i,E(k));
alpha(E(k),:)=[num2str(i) - num2str(E(k))]; % m
emorisation ar^
etes
end
end
end
Considerons le graphe de la figure 26. Le programme ci-apr`es permet de determiner un arbre
couvrant de ce graphe.

53

1
7

4
2
2

3
4

10

Fig. 26 Graphe simple


clear
%
1
2
3
4
D=[ 0
7
3
2
7
0
1 inf
3
1
0 inf
2
inf inf 0
2
inf
4
1
inf inf
3 10
inf inf inf 2
%
alpha=prim(D);
setstr(alpha)

5
6
7
2 inf inf
inf inf inf
4
3 inf
1 10
2
0
4
2
4
0
7
2
7
0 ]

Le resultat obtenu est :


ans =
--3-2
1-3
1-4
4-5
3-6
4-7
Cela correspond a` larbre suivant :
2

4
1

3
1

5
3

7
6

Fig. 27 Arbre couvrant de poids minimal

54

R
ef
erences
[1] A.V. Aho, J.E. Hopcroft et J.D. Ullman, The design and analysis of computer algorithms,
ISBN 0-201-00029-6, Addison Wesley, Reading (Mass.), 1974.
[2] M.L. Assas, Analyse de la tolerance aux fautes : approches fonctionnelle et structurelle.
Th`ese de doctorat de lUniversite des Sciences et Technologies de Lille, 2002.
[3] K. Appel et W. Haken, Every planar map is 4-colorable, Bulletin of the AMS, Volume 82,
711-712, 1976.
[4] C. Berge, Graphes, ISBN 2-04-15555-4, Gauthiers-Villars, Bordas, Paris, 1983.
[5] H. Bestougeff, C. Guilpin et M. Jacques, La technique informatique, Tome 2 : algorithmes
numeriques et non numeriques, ISBN 2-225-40337-6, Masson, Paris, 1975.
[6] N. Biggs, E. Lloyd et R. Wilson, Graph Theory 1736-1936, ISBN 0-19-853901-0, Clarendon
Press Oxford, 1976.
[7] R. Cabane, Theorie des graphes, Techniques de lIngenieur, Traite Sciences fondamentales,
document AF205.
[8] H. Coilland, Polycopie dexercices de recherche operationnelle, IUT Informatique Nancy 2
et Ecole des Mines de Nancy, juillet 1999.
[9] R. Diestel, Graph theory, Graduate Texts in Mathematics Series, vol. 173, electronic
edition, http ://www.math.uni-hambourg.de/home/diestel/books/graph.theory, SpringerVerlag, New York 1997, 2000,
[10] F. Droesbeke, M. Hallin et C. Lefevre, Les graphes par lexemple, ISBN 2-7298-8730-X,
Ellipses, 1987.
[11] N. Deo, Graph theory with applications to engineering and computer science, Prentice-Hall,
Englewood cliffs (N.J.),1975.
[12] L. Euler, Solutio Problematis Ad geometriam Situs Pertinentis, Commenrarii Academiae
Scientiarum Imperialis Petropolitanae, 8, pp. 128-140, 1736.
[13] M. Gondran et M. Minoux,Graphes et algorithmes, 2`eme ed., Collection de la Direction des
Etudes et Recherches dElectricite de France, Eyrolles 1985.
[14] M. Minoux et G. Bartnik, Graphes, algorithmes, logiciels, Dunod Informatique, ISBN 2-04016470-7, Bordas Paris, 1986.
[15] Roseaux, Exercices et probl`emes resolus de recherche operationnelle. Tome 1. Graphes :
leurs usages, leurs algorithmes, ISBN 2-10-003935-0, Dunod, Paris, 1998.

55

Vous aimerez peut-être aussi