COURS DE RO1 : THEORIE DES GRAPHES ET … Operationnelle.pdf · Preuve : Exercice (Ind. faire une...

40
COURS DE RO1 : THEORIE DES GRAPHES ET APPLICATIONS Dr Etienne Téna SORO 1 30 mars 2012 1. Université de Cocody-Abidjan, UFR de Mathématiques et Informatique ; 22 BP 582 Abidjan 22

Transcript of COURS DE RO1 : THEORIE DES GRAPHES ET … Operationnelle.pdf · Preuve : Exercice (Ind. faire une...

COURS DE RO1 : THEORIE DES GRAPHES ET

APPLICATIONS

Dr Etienne Téna SORO1

30 mars 2012

1. Université de Cocody-Abidjan, UFR de Mathématiques et Informatique ; 22 BP 582 Abidjan

22

Chapitre 1

Graphes orientés

1.1 Définitions et premières propriétés

1.1.1 Sommets et arcs

Un graphe orienté G est défini par la donnée d’un ensemble S dont les éléments sontappelés des sommets ou noeuds et d’un ensemble A dont les éléments sont des couplesd’éléments de S appelés arcs. On le note G = (S,A). Le nombre n de sommets de G estappelé l’ordre de G et m celui des arcs de G est appelée la taille de G.

Exemple

Soit G = (S,A) le graphe orienté défini par : S = {x, y, z} et A = {a, b, c, d} oùa = (x, z), b = (z, x), c = (x, y), d = (z, y) et e = (y, y).

z

y

x

c

a b

ed

Etant donné un arc u = (x, y), on dit que le sommet x est l’origine ou l’extrémitéinitiale de u ; le sommet y est le but ou l’extrémité finale ou terminale de u. On dit aussique y est un successeur de x et que x est un prédécesseur de y. On dit également que lessommets x et y sont adjacents ou voisins et que l’arc u est incident à x et y.

1.1.2 Demi-degré et degré

Deux arcs sont adjacents s’ils sont incidents à au moins une extrémité commune.Le demi-degré extérieur du sommet x, noté d+

G(x) ou plus simplement d+(x) est le nombred’arcs ayant x pour extrémité initiale.Le demi-degré intérieur du sommet x, noté d−G(x) ou plus simplement d−(x) est le nombred’arcs ayant x pour extrémité finale.Le degré du sommet x, noté dG(x) ou plus simplement d(x) est : d(x) = d+(x) + d−(x).

1

Proposition 1 La somme des degrés des sommets de G est égale à deux fois la taille deG.

Preuve : Il suffit de remarquer que dans la somme des degrés chaque arc est comptédeux fois : une fois dans le demi-degré extérieur et une autre fois dans le demi-degréintérieur. �

Corollaire 1 Dans un graphe orienté, le nombre de sommets de degrés impairs est pair.

Etant donné X ⊂ S, on définit :

• w+(X) est l’ensemble des arcs ayant leur extrémité initiale dans X et leur extrémitéterminale dans S −X.

• w−(X) est l’ensemble des arcs ayant leur extrémité initiale dans X−S et leur extrémitéterminale dans X.

• w(X) = w+(X) + w−(X) est appelé un cocycle du graphe.

1.1.3 Chaîne, chaîne élémentaire, cycle, cycle élémentaire

Une Chaîne de longueur k est une suite µ = a1, a2, . . . ak de k arcs telle que deux arcsconsécutifs sont adjacents. On notera µ = x0a1x1 . . . xk−1akxk, si l’on veut préciser lessommets rencontrés. Les sommets x0 et xk sont appelés les extrémités de la chaîne µ. Ondit que la chaîne µ rélie les sommets x0 et xk.

Une chaîne élémentaire est une chaîne telle qu’en la parcourant, on ne rencontre pasdeux fois le même sommet. De façon équivalente, on peut la définir comme une chaîne dontles sommets sont tous de degré 2 sauf ses extrémités.

Proposition 2 De toute chaîne on peut extraire un chaîne élémentaire. �

Un cycle est une chaîne dont les extrémités coïncident. Un cycle élémentaire est uncycle dont tous les sommets sont de degré 2.

1.1.4 Chemin, chemin élémentaire, circuit et circuit élémentaire

Un chemin est une chaîne dont tous les arcs sont orientés dans le même sens. Formel-lement on dit qu’un chemin de longueur k est une suite µ = a1, a2, . . . , ak d’arcs telle quel’extrémité initiale (resp. finale) de chaque arc ai avec 2 ≤ i ≤ k− 1 est l’extréminté finalede l’arc ai−1 (resp. l’extrémité initiale de l’arc ai+1). Pour indiquer les extrémités on note :µ = x1a1x2a2x3 . . . xk−1akxk. Les sommets x1 et xk sont appelés les extrémités du cheminµ. On dit que le chemin µ relie les sommets x1 et xk.

Un chemin élémentaire est un chemin tel qu’en le parcourant, on ne rencontre pas deuxfois le même sommet. Dans un chemin élémentaire tous les sommets sont de degré 2 au plus.

Un circuit est un chemin dont les extrémités coïncident. Un circuit élémentaire est uncircuit dont tous les sommets sont de degré 2.

2

1.2 Représentations d’un graphe

1.2.1 Matrice d’incidence (sommets-arcs)

La matrice d’incidence sommets-arcs d’un graphe orienté G = (S,A) est la matriceP = (pxu) à coefficients entiers : 0, -1 et 1 tels que pour tout u = (x, y) ∈ A, tous lescoefficients de la colonne u sont nuls sauf pxu = 1 et pyu = −1.

Si x est une ligne de P alors

w+(x) = {u / pxu = 1}

w−(x) = {u / pxu = −1}

1.2.2 Exemple

1 2

4 3

a

bc

d

e

On obtient la matrice d’incidence :

1 1 0 0 0−1 0 1 1 00 −1 −1 0 10 0 0 −1 −1

1.2.3 Matrice d’adjacence (sommets-sommets)

La matrice d’adjacence sommets-sommets d’un graphe orienté G = (S,A) est la matriceQ = (qxy) à coefficients entiers : 0 et 1 tels que pour tout x et y dans S on a :

qxy = 1 si et seulement si (x, y) ∈ A.

La matrice d’adjacence de l’exemple précédent est

0 1 1 00 0 1 10 0 0 10 0 0 0

1.2.4 Tableaux α et β

On considère ici que les sommets sont rangés et désignés par leur rang. Ainsi on poseS = {1, 2, . . . , n}. Les tableaux α() et β() sont respectivement des matrices unilignes dedimension n + 1 et m. Pour chaque sommet i, la liste des sommets successeurs de i estcontenue dans le tableau β() à partir de la case numéro α(i). Et donc l’ensemble dessuccesseurs de i est contenu entre les cases α(i) et α(i + 1)− 1 du tableau β().

{

α(1) = 1α(i + 1) = d+(i) + α(i)

3

1.3 Quelques graphes particuliers

Soient G = (S,A) un graphe orienté, S1 une partie de S et A1 une partie de A.

On appelle sous-graphe engendré par S1, le graphe noté GS1dont les sommets sont les

éléments de S1 et dont les arcs sont les arcs de G ayant leurs deux extrémités dans S1.

On appelle graphe partiel engendré par A1, le graphe noté G[A1] ayant le même en-semble S de sommets que G et dont les arcs sont ceux de A1.

Le sous-graphe partiel engendré par S1 et A1 est le graphe partiel de GS1engendré par

A1.

On dit G est strict si G est sans boucle et deux sommets quelconques sont tous deuxincidents à au plus un arc. Si G est strict alors le graphe complémentaire de G a le mêmeensemble de sommets que G et comme arcs les arcs complémentaires à A :

(x, y) ∈ A→ (x, y) /∈ A

(x, y) /∈ A→ (x, y) ∈ A

On dit que G est biparti si l’ensemble des sommets S peut être partitionné en deuxsous ensembles S1 et S2 de tel sorte que, tout arc a une extrémité dans S1 et l’autre dans S2.

On dit que G est complet si G est strict tel que deux sommets distincts quelconquessont reliés par un seul arc.

1.4 Connexité et forte connexité

1.4.1 Graphe connexe

Soit G = (S,A) un graphe orienté. On dit que G est connexe si, pour tout couple desommets (x, y), il existe une chaîne reliant x et y. On associe à cette notion de connexitéune relation d’équivalence R définie par :

xRy ⇔

{

soit x = y,

soit il existe une chaîne reliant x et y.

Les classes d’équivalence induites sur S par cette relation forment une partition de Sen : S1, . . . , Sp. Le nombre p de classes distinctes est appelé le nombre de connexité dugraphe.

Proposition 3 G est connexe si et seulement si p = 1. �

Les sous graphes G1, . . . , Gp engendrés par les sous ensembles S1, . . . , Sp sont appelés lescomposantes connexes du graphe G. Chaque composante connexe est un graphe connexe.

Un point d’articulation d’un graphe est un sommet dont la suppression augmente lenombre de composantes connexes. Un isthme est un arc dont la suppression a le mêmeeffet.

4

1.4.2 Graphe fortement connexe

Soit G = (S,A) un graphe orienté. On dit que G est fortement connexe si, pour toutcouple de sommets (x, y), il existe un chemin allant de x à y. On associe à cette notion deforte connexité une relation d’équivalence T définie par :

xT y ⇔

{

soit x = y,

soit il existe un chemin allant de x à y et un chemin allant de y à x.

Les classes d’équivalence induites sur S par cette relation forment une partition de Sen : S1, . . . , Sq. Le nombre q de classes distinctes est appelé le nombre de forte connexitédu graphe.

Les sous graphes G1, . . . , Gq engendrés par les sous ensembles S1, . . . , Sq sont appelésles composantes fortement connexes du graphe G. Chaque composante fortement connexeest un graphe fortement connexe.

Proposition 4 G est fortement connexe si et seulement s’il n’a qu’une seule composantefortement connexe. �

1.4.3 Graphe réduit

Soit G = (S,A) un graphe orienté. On appelle graphe réduit de G, le graphe quotientGr = G/T du graphe G par la relation d’équivalence T . Les sommets de Gr sont lescomposantes fortement connexes et il existe un arc de Gi à Gj si et seulement s’il existeau moins un arc allant d’un sommet de Gi à un sommet de Gj dans G.

Proposition 5 Le graphe Gr est sans circuit. �

1.5 Graphe sans circuit

1.5.1 Sources et puits

Soient G = (S,A) un graphe orienté, s et p deux sommets de G. On dit que s est unsommet source ou simplement source de G si d−(s) = 0. Le sommet p est appelé sommetpuits ou simplement puits de G si d+(p) = 0.

Proposition 6 Si G est sans circuit alors il admet un sommet source et un sommet puits.

Preuve : Exercice (Ind. faire une preuve par construction). �

Proposition 7 Si G est strict tel que pour tout x ∈ S on a : d−(x) = d+(x) alors G estfortement connexe si et seulement si G est connexe.

Preuve : Soit G = (S,A) un graphe orienté strict tel que pour tout x ∈ S on a :d−(x) = d+(x).

Si G est fortement connexe il est claire que G est connexe.

Reciproquement supposons que G est connexe mais n’est pas fortement connexe. DoncG admet q > 1 composantes fortement connexes, notés G1, . . . , Gq. D’après la proposition

5

5, le graphe réduit Gr est sans circuit. Il existe, d’après la proposition 6, un sommet Gp

(avec p ∈ {1, . . . , q}) dans Gr tel que d+(Gp) = 0. Tout arc de G dont l’extrémité initialeest dans Gp a aussi son extrémité finale dans Gp. D’après lhypothèse, dans le grapheGp = (Sp, Ap) on a :

x∈Sp

d−(x) =∑

x∈Sp

d+(x),

mais comme G est connexe il existe une composante fortement connexe Gi = (Si, Ai), unsommet y ∈ Si et un sommet x ∈ Sp tels que (y, x) ∈ A. Ce qui donne dans G :

x∈Sp

d−(x) >∑

x∈Sp

d+(x),

ce qui contredit l’hypothèse sur les degrés. �

Proposition 8 Si G est strict alors G est sans circuit si et seulement si

{

• il existe un sommet s tel que d−(s) = 0,

• pour tout s ∈ S tel que d−(s) = 0, le sous graphe G− {s} est sans circuit.

Preuve : Soit G = (S,A) une graphe orienté strict.

Si G est sans circuit alors d’après la proposition 6, il existe s ∈ S tel que d−(s) = 0 etcomme tout sous graphe d’un graphe sans circuit est un graphe sans circuit on deduit quepour toute source s le graphe G− {s} est sans circuit.

Réciproquement supposons que s est une source de G et donc le sous graphe G − {s}est sans circuit. Si G contenait un circuit alors ce circuit contiendrait s et d−(s) > 0 ; cequi contredit le fait que s est une source de G. �

1.5.2 Tri topologique d’un graphe

Soit G = (S,A) un graphe orienté strict. Un tri topologique ( on dit aussi bonne numé-rotation ou encore numérotation acyclique) de G est une énumération (ou une indexation)s1, . . . , sn des sommets de G tel que si (si, sj) ∈ A alors i < j. De façon équivalente c’estaussi une application f de S dans {1, 2, . . . , n} telle que f(x) < f(y) si et seulement si(x, y) ∈ A.

Proposition 9 Un graphe orienté strict admet un tri topologique si et seulement s’il estsans circuit.

Preuve : Soit G = (S,A) un graphe orienté strict.

Supposons que G admet un tri topologique f et qu’il contient un circuit s1a1s2 . . . skaks1.Le tri donne

f(s1) < . . . < f(sk) < f(s1) et donc f(s1) < f(s1);

ce qui est absurde.

Réciproquement si G est sans circuit alors en posant S1 = S et G1 = G, on a d’aprèsla proposition 8• Il existe s1 ∈ S1 tel que d−G1

(s1) = 0 et posons S2 = S1 − {s1} et G2 = GS2

6

• Il existe s2 ∈ S2 tel que d−G2(s2) = 0 et posons S3 = S2 − {s2} et G3 = GS3

. . .• Il existe sn−1 ∈ Sn−1 tel que d−Gn−1

(sn−1) = 0 et posons Sn = Sn−1 − {sn−1} et Gn =GSn−1

• Il existe sn ∈ Sn tel que d−Gn(sn) = 0.

Ainsi on construit un tri topologique. �

1.6 Arborescence

1.6.1 Définitions

Soient G = (S,A) un graphe orienté et r ∈ S. On dit que r est une racine de G si toutsommet de G peut être atteint par un chemin d’origne r. Une arborescence est un grapheorienté a une seule racine et sans cycle.

On dit que G possède la condition des demi-degrés intérieurs lorsque d−(s) = 1 pourtout sommet s de G sauf pour un sommet qu’on note r, pour lequel d−(r) = 0.

Exemple

r

a b c

d e f g

h

Les sommets puits a, d, e, h, g sont appelés feuilles. d et e sont frères et fils de b. lesdescendants de c sont f, g, h.

1.6.2 Caractérisation des arborescences

Proposition 10 Soit G = (S,A) un graphe orienté. Les conditions suivantes sont équiva-lentes

1. G est une arborescence.

2. G a une racine et est acyclique.

3. G a une racine et m = n− 1.

4. Il existe un sommet r ∈ S tel que pour tout sommet s ∈ S, il existe un chemin uniqueallant de r à s.

5. G est connexe et possède la condition des demi-degrés intérieurs.

6. G est acyclique et possède la condition des demi-degrés intérieurs.

7

7. G est sans circuits et possède la condition des demi-degrés intérieurs.

Preuve : Exercice. �

1.7 Parcours dans les graphes

L’idée générale des algorithmes de parcours dans les graphes est :

• Initialisation

• Tant que non fini Faire

Selection d’un sommet

Traitement du sommet

L’algorithme détaillé est le suivant où chaque sommet peut avoir trois état :– non-atteint : l’algorithme ne le connait pas encore.– atteint : l’algorithme a rencontré le sommet mais ne l’a pas encore traité.– examiné : l’algorithme a traité le sommet, il le connait ainsi que tous ses successeurs.

On ne teste jamais si un sommet est dans cet état, il sert uniquement à une bonnecompréhension de l’algorithme.

L’algorithme détaillé

à-traiter := ∅

Pour tout s de S faire

état(s) := non-atteint

Pour tout s de S faire

Si état(s) := non-atteint Alors

état(s) := atteint

père(s) := ⊥ (*s est une racine*)

à-traiter :=à-traiter ∪{s}

Tant que à-traiter : 6= ∅ Faire

y := choix(à-traiter)

à-traiter := à-traiter−{y}

Pour tout z de Succ(y) Faire

Si état(z) = non-atteint Alors

père(z) := y

état(z) := atteint

à-traiter := à-traiter ∪{z}

état(y) := examiné

8

1.8 Exercices

1.8.1 Exercice 1

On considère le graphe G = (X,U) défini par : X = {1, 2, 3, 4, 5} et U = {a = (1, 2), b =(2, 4), c = (3, 4), d = (2, 3), e = (5, 2), f = (3, 5)}

1. Donner son codage par sa matrice d’adjacence, puis par sa matrice d’incidence.

2. Ce graphe contient-il des circuits ? Si oui, donnez-les.

3. Est-il fortement connexe ? si oui justifier sinon déterminer son graphe réduit.

1.8.2 Exercice 2

On propose deux méthodes pour coder un graphe G = (S,A) en machine : la matriced’adjacence M et la file des successeurs de tableaux ALPHA1, ALPHA2 et BETA. Lafile des successeurs BETA est le tableau des successeurs, les successeurs du sommet s setrouvant entre les adresses ALPHA1(s) et ALPHA2(s) dans le tableau BETA (en courson avait un seul tableau ALPHA).

Sommets Sommets antérieurs

1 1,2,4

2 1

3 1,2,5

4 1,5

5 4

1. Donner une représentation sagittale du graphe ci-dessus.

2. Rapporter les tableaux M , ALPHA1, ALPHA2 et BETA.

3. Ecrire un algorithme permettant de passer de la file des successeurs à la matriced’adjacence. Quelle est la complexité de cet algorithme ?

4. Ecrire un algorithme permettant de passer de la matrice d’adjacence à la file dessuccesseurs. Quelle est la complexité de cet algorithme

1.8.3 Exercice 3

(Lemme de Koenig) Montrer que de tout chemin on peut extraire un chemin élémen-taire. Peut-on étendre ce résultat aux chaînes ?

1.8.4 Exercice 4

Ecrire un algorithme glouton (de proche en proche) permettant de dire si un grapheest connexe ou non. Adapter le pour déterminer les composantes fortement connexes d’ungraphe.

9

1.8.5 Exercice 5

Soient G = (S,A) un graphe oriente d’ordre n , M la matrice d’adjacence associée et Ila matrice identité d’ordre n. On pose N = (I + M)n−1 = (Nij)ij .

1. Montrer que I + M + M2 + . . . + Mn−1 = N .

2. Montrer que Nij = 1 si et seulement s’il existe un chemin allant de i à j de longueurau plus égale à n−1. Déduire que G est fortement connexe si et seulement si Nij = 1pour tous i et j.

3. En utilisant les résultats des questions précédentes, déterminer les composantes for-tement connexes du graphe de l’exercice 1.8.1 et déterminer son graphe réduit.

1.8.6 Exercice 6

Soit G = (S,A) un graphe oriente d’ordre n et f une application de S dans {1, 2, . . . , n}.On dit que f est un tri topologique (on dit aussi bonne numérotation ou numérotationacyclique) si pour tout couple (x, y) de A on a f(x) < f(y).

1. Montrer que G est sans circuits si et seulement si pour toute partie X de S, lesous-graphe GX engendré par X possède au moins un sommet sans prédécesseurs.

2. Montrer que G est sans circuits si et seulement s’il existe un tri topologique sur G.

1.8.7 Exercice 7

Soit G un graphe orienté sans circuits ayant un unique sommet source r (sans prédé-cesseurs). On fait observer que tout sommet de G est accessible par un chemin depuis r.On appelle niveau de sommets dans G, tout ensemble de sommets constitue des sommetsqui sont à une même plus grande longueur (de chemin) de r. En particulier le sommetr constitue à lui seul un niveau, correspondant à la plus grande longueur 0. Puis, pourchaque plus grande longueur possible 1, 2, . . . (jusqu’à la plus grande valeur k pour laquelleil existe dans G un sommet à plus grande longueur k de r), correspond un niveau de som-mets dans G. Les niveaux, non vides, ainsi définis constituent une partition de l’ensembledes sommets de G, appelée classement par niveaux. Les niveaux sont par ailleurs ordonnésdans l’ordre des valeurs des plus grandes longueurs correspondantes.

1. Montrer que deux sommets d’un même niveau ne sont jamais reliés par un arc.

2. Montrer que chaque arc de G va d’un niveau à un niveau supérieur.

3. Montrer qu’en numérotant les sommets de G dans l’ordre croissant des niveaux, etde façon quelconque à l’intérieur d’un même niveau, on obtient un tri topologique.

4. Déterminer le classement par niveaux des sommets du graphe dont l’ensemble dessommets est : {r, a, b, c, d} et celui des arcs est : {(r, a); (r, b); (a, c); (b, d); (c, d)}.

5. Trouver dans ce graphe, un tri topologique qui ne peut pas être obtenu à partir d’unclassement par niveaux obtenu comme indiqué à la question 3).

1.8.8 Exercice 8

Soit G=(S, A) le graphe défini par :

10

Sommets Sommets antérieurs

1 2

2 1

3 1,4

4 3,5

5 7

6 4,5,6,8

7 6,8

8 2

1. Donner son codage par sa matrice d’adjacence.

2. Ce graphe contient-il des circuits ? Si oui, donnez-les.

3. Est-il fortement connexe ? justifiez votre réponse.

4. Déterminer son graphe réduit Gr.

5. Montrer que Gr est sans circuit.

6. Donner la matrice Mr d’adjacence du graphe réduit Gr et calculer ses puissancessuccessives. Que constatez-vous ?

7. Plus généralement, montrer qu’un 1-graphe G (quelconque) est sans circuits si etseulement si sa matrice M d’adjacence est nilpotente (c’est- à -dire qu’il existe unentier k > 0 tel que Mk = 0).

1.8.9 Exercice 9

Un graphe G est quasi fortement connexe si à tous couples (s, t) de ses sommets onpeut associer un sommet x tel qu’il existe un chemin de x à s et un chemin de x à t.

1. Montrer que G est quasi fortement connexe si et seulement si G admet une racine.

2. Un graphe fortement connexe est-il quasi fortement connexe ? Si oui combien a-t-ilde racines ?

1.8.10 Exercice 10

Soit G = (S,A) un graphe non valué et r un sommet fixé de G.

1. Enoncer un algorithme de calculs des distances de r à tous les autres sommets de G.On s’appuiera sur celui des parcours en largeur d’un graphe (voir cours).

2. Pour tout entier k ≥ 0, on note Dk l’ensemble des sommets à distance k de r et Mk

l’ensemble des sommets marqués à distance k de r dans l’algorithme (NB : pour évitertoute confusion au niveau de la distance on dira simplement que Mk est l’ensembledes sommets marqués k dans l’algorithme). Noter que D0 = M0 = r.

(a) Montrer que les Mk sont deux à deux disjoints. Qu’en est-il des Dk ?

(b) Montrer par récurrence que Mk = Dk pour tout k.

(c) Calculer la complexité de l’algorithme.

11

Chapitre 2

Chemins optimaux

2.1 Notion de distance et problèmes de cheminement

2.1.1 Graphe valué

Soit G = (S,A) un graphe (orienté ou non). On associe à chaque arc (ou arête) a ∈ Aun réel l(a) appelé poids ou longueur de a. L’application l ainsi définie :

l : A → R

a 7→ l(a)

est appelée une valuation du graphe G, on note G = (S,A, l) et on dit que le graphe estvalué.

2.1.2 Plus court chemin et distance

Soient G = (S,A, l) un graphe valué et µ(s0, sk) un chemin allant de s0 à sk. On appellelongueur du chemin ou bien poids du chemin µ(s0, sk) et on note l(µ(s0, sk)) la somme despoids des arcs de µ(s0, sk). Remarquer que si la valuation l est constante égale à 1 alors lanotion définie ici coïncide avec la notion de longueur d’un chemin comme nombre de sesarcs. Un circuit de longueur strictement négative est appelé circuit absorbant.

Proposition 11 Soient s et t deux sommets de G. Pour qu’il existe un plus court cheminallant de s à t il faut et il suffit que tout chemin allant de s à t ne contienne pas de circuitabsorbant.

Preuve : Soit C l’ensemble des chemin de s à t. Si µ ∈ C contient un circuit ω alorson note µ′ le chemin de s à t associé à µ mais n’empruntant pas le circuit ω et on a :l(µ) = l(µ′) + l(ω).

• S’il existe un chemin µ ∈ C contenant un circuit absorbant alors il n’existe pas de pluscourt chemin de s à t. Il suffit en effet de considérer le chemin obtenu à partir de µen passant un assez grand nombre de fois par le circuit absorbant.

• Si tout chemin µ ∈ C ne contient pas de circuit absorbant alors l(ω) ≥ 0, l(µ′) ≤ l(µ)et on peut se restreindre aux chemins élémentaires. Comme ils forment un ensemblefini, il existera un plus court chemin. �

Soit G = (S,A, l) une graphe orienté, valué et sans circuits absorbants. On appelle distancede s à t, deux sommets de G et on note d(s, t) la plus petite longueur des chemins de s àt dans le graphe G.Un plus court chemin de s à t est un chemin µ tel que l(µ) = d(s, t).

12

2.1.3 Plus long chemin et plus grande longueur

Soit G = (S,A, l) un graphe orienté valué. Un chemin σ de s à t, deux sommets de G,est un plus long chemin de s à t s’il est de longueur maximum.

Proposition 12 Soient s et t deux sommets de G. Pour qu’il existe un plus long cheminallant de s à t il faut et il suffit que tout chemin allant de s à t ne contienne pas de circuitde longueur strictement positive.

Preuve : Exercice.On appelle la plus grande longueur ou encore plus grande distance de s à t le maximumdes longueur de s à t et on note D(s, t).

2.1.4 Problèmes de cheminement

Les problèmes considérés sont :

1. Recherche d’un plus court chemin d’un sommet à un autre (problème de 2 sommets).

2. Recherche d’un plus court chemin d’un sommet à tous les autres (problème avec unsommet origine unique).

3. Recherche d’un plus court chemin entre tous les couples de sommets (problème detous les couples de sommets).

La suite du chapitre est consacré au problème avec un sommet origine unique. La résolutiondépend de la nature des graphes et de la valuation.

2.2 Cas où le graphe est non valué

On considère un graphe G = (S,A) orienté non valué. On peut poser G = (S,A, l) où lest constante égale à 1. On note r le sommet origine donc d(r, r) = 0. La distance est biendéfinie.

2.2.1 Calcul des distances

Le calcul des distances repose sur un algorithme de parcours en largeur du graphe G àpartir de r. Soit F une file. On rappelle qu’une file fonctionne selon le principe du premierentré, premier sorti. Les opérations élémentaires sont.

• enfiler(F,s) : met s dans la file à la queue.

• tête-file(F) : retourne le sommet qui est en tête de F sans l’enlever.

• défiler(F,s) : enlève le sommet qui est en tête sans le retourner.

• file-vide(F) : retourne vrai ou faux selon que F est vide ou non.

Algorithme

a) Initialisation

Pour tout sommet s ∈ SAtteint(s) :=Faux

Fin Pour

13

b) Visite de r (sommet origine unique)Atteint(r) :=VraiEnfiler(F ,r)d(r, r) = 0s := r

c)

Tant que file-vide(F )=Faux

Pour tout successeur t de s qui n’est pas encore atteintd(r, t) = d(r, s) + 1Atteint(t) :=VraiEnfiler(F ,t)

Fin PourDéfiler(F ,s) s :=tête-file(F )

Fin Tant Que

Noter que Atteint( ) est un tableau indexé sur les sommets du graphe G.

2.2.2 Arborescence de plus courts chemins

L’ensemble de plus courts chemins déterminés définit dans le graphe une arborescencede plus courts chemins.

Exemple

2 3 4

1 5 6 7 8

9 10

L’algorithme permet de calculer les distances suivantes :

s 1 2 3 4 5 6 7 8 9 10

d(r, s) 0 1 2 5 1 2 4 6 1 3

Il existe plusieurs arborescences, en voici une.

14

2 3 4

1 5 6 7 8

9 10

2.3 Cas où le graphe est sans circuits et application aux pro-

blèmes d’ordonnancement

2.3.1 Calcul des distances et des plus grandes distances

Soit G = (S,A, l) un graphe orienté valué et sans circuits. On obtient :

1. G admet un tri topologique r = s1, s2, . . . , sn de sorte que tout prédécesseur si de sj

est tel que i < j.

2. La distance entre deux sommets s et t est bien définie car G est sans circuits. Doncon peut calculer les distances de proche en proche dans G.

{

d(s1, s1) = 0

d(s1, sj) = Minsi∈Γ−1(sj)(d(s1, si) + l(si, sj))

3. la plus grande longueur ou distance D(s, t) est bien définie car G est sans circuits.Donc on peut calculer les plus grandes distances de proche en proche dans G.

{

D(s1, s1) = 0

D(s1, sj) = Maxsi∈Γ−1(sj)(D(s1, si) + l(si, sj))

2.3.2 Graphe potentiel-tâches ou graphe MPM

Le graphe potentiel-tâches, aussi appelé graphe MPM est une modélisation d’un projetqui permet une planification dans le temps des différentes tâches : c’est un ordonnancement.Soit un projet décomposé en n tâches élémentaires 1, 2, . . . , n. Pour chaque tâche i, il estdonné sa durée di et les tâches antérieures c’est-à-dire les tâches qui doivent être achévéespour que la tâche i puisse commencer.

Tâches Durées Tâches antérieures...

......

i di j, k...

......

Définition

Soient G = (S,A, l) le graphe potentiel-tâches associé au projet avec S = {α, 1, 2, . . . , n, ω}où α désigne le début et ω la fin du projet, considérés comme des tâches fictives de duréenulle. (i, j) ∈ A si la tâche i est antérieure ‘a la tâche j. La longueur ou le poids de l’arc(i, j) est l(i, j) = di. Il est claire que G est orienté strict et sans circuits.

15

Notions de dates

La date au plus tôt ti d’une tâche i est la date la plus rapprochée (optimiste) à laquellei peut commencer. On a : tα = 0 et tω est la durée minimum du projet.

{

tα = 0

ti = Maxj∈Γ−1(i)(tj + di) pour i ∈ {1, . . . , n, ω}

La date au plus tard Ti d’une tâche i est la date la plus tardive (pessimiste) à laquellei doit commencer pour que la durée minimale de réalisation du projet soit respectée c’est-à-dire Tω = tω. Les dates au plus tard se calcul par un compte à rebours à partir de Tω

etTi = Minj∈Γ(i)(Tj − di) pour i = n, n− 1, . . . , 2, 1

on égalementTi = D(α, ω) −D(i, ω)

.La date de fin au plus tard T ′

i d’une tâche i est la date la plus pessimiste de fin d’unetâche et se calcul par la formule suivant :

T ′i = Minj∈Γ(i)(tj − di) pour i = n, n− 1, . . . , 2, 1

Exemple : On considère un projet qui comporte 7 tâches : a, b, c, d, e, f, g.

Tâches a b c d e f g

Durées 4 3 6 2 8 7 1

Tâches antérieures a,b b c,d,e c

On obtient le graphe potentiel-tâches G = (S,A, l) ci-dessous, où S = {deb, a, b, c, d, e, f, g, f in}

a c g

deb b d f fin

e

4

3

3

8

6

6

2

1

7

Tâches deb a b c d e f g fin

Durées 0 4 3 6 2 8 7 1 0

ti 0 0 0 4 3 0 10 10 17

Ti 0 0 1 4 8 2 10 16 17

Les marges

La marge totale est le délai MT (i) = Ti − ti pouvant être accordé à une tâche sansrepousser la durée minimal du projet. On dit qu’une tâche i est critique si MT (i) = 0. Lasuccession de taches qui imposent la durée minimale du projet est appelée chemin critique.

16

La marge libre d’une tâche i est le délai ML(i) pouvant être accordé au commencementde la tâche sans modifier la marge totale des tâches qui suivent.

ML(i) = Minj∈Γ(i)(tj − di)− ti

ou encoreML(i) = T ′

i − ti

. Contrairement à la marge totale, la marge libre peut être consommée sans aucune consé-quence sur les tâches qui suivent dans le projet. La marge libre d’une tâche est toujoursinférieure ou égale à sa marge totale.

2.3.3 Graphe potentiel-étapes ou graphe PERT

Le graphe potentiel-étapes ou graphe PERT est un graphe orienté valué strict et sanscircuits dont les sommets représentent la fin d’une tâche et le début d’une autre et dontles arcs représentent les tâches.

Définitions

Les successives se suivent dans le temps et sont représentées par un chemin. Par exempleles tâches a, b, c sont successives :

1 2 3 4a b c

Les tâches simultanées ont le même début d’exécution. Par exemple les tâches a, b sontsimultanées :

2

1 3

b

a

Les tâches convergentes aboutissent à la même étape. Par exemple a, b sont conver-gentes :

2

3 1a

b

Les contraintes de liaison apparaissent quand un tâche appartenant à une suite detâches successives ne peut être exécutée avant qu’une autre tâche, n’appartenant pas àcette suite, ne soit achevée.

17

1 2 3 4

5 6 7 8

b c g

d e f

f ne peut pas commencer avant que c ne soit achevée même si e est terminée. On nepeut pas avoir le graphe suivant :

1 2 6

3 4 5 7

b

c

d e

g

f

car cela signifirait que e doit être achevée pour que g commence, ce qui n’est pas né-cessaire.

les tâches fictives sont introduites pour éviter que deux tâches soient à la fois simulta-nées et convergentes.

Construction d’un graphe PERT

Il est claire que le graphe PERT à construire est sans circuits. On peut donc classerles sommets par niveaux. On trace un graphe des niveaux en reliant les tâches successivesentre deux niveaux consécutifs. Puis on trace le graphe PERT à partir de ce graphe demannière à ce que toutes les tâches aboutissent à une étape et que l’antériorité des tâchessoit respectée. Noter que toutes les tâches du niveau 1 sont simultanées et celle du dernierniveau sont convergentes.

2.4 Cas où les longueurs sont positives

Soit G = (S,A, l) un graphe orienté strict où S = {s1, s2, . . . , sn}.

2.4.1 Algorithme de Dijkstra

1. InitialisationS′ = {s2, s3, . . . , sn}λ(s0) = 0λ(si) = l(s1, si) si si est un successeur de s1 sinon λ(si) =∞

2. Selection d’un sommetSélectionner sj ∈ S′ tel que λ(sj) = Minsi∈S′(λ(si)Faire S′ ← S′ − {sj}Si S′ est vide FINSinon aller en 3

3. Calcul des valeurs de λFaire pour tout si à la fois dans Γ(sj) et dans S′

λ(si)← Min(λ(si), λ(sj) + l(sj , si))et retourner en 2

18

L’algorithme considère les sommets dans un ordre qui dépend des valeurs λ(si) appeléeslabels. A la fin on a λ(si) = d(s1, si) pour tout si ∈ S.

2.4.2 Exemple d’application

On considère le graphe suivant :

b d

a e

c f

7

1

5

4

21

2

7

5

3

On obtient alors :

Sommets a b c d e f

Initialisation 0 7 1 ∞ ∞ ∞

Itération 1... 6 1 ∞ 3 8

Itération 2... 5

... 8 3 8

Itération 3... 5

... 8... 6

Itération 4...

...... 8

... 6

Itération 5...

...... 8

......

On obtient une arborescence de parcours

b d

a e

c f

1

21

2

5

2.5 Cas où les longueurs sont quelconques

Soit G = (S,A, l) un graphe orienté strict où S = {s1, s2, . . . , sn}.

2.5.1 Algorithme de Bellmann

1. Initialisationλ0(s1) = 0

19

λ0(si) =∞ pour tout si 6= s1

k = 1

2. A l’itération kFaire λk(s1) = 0et λk(si) = Min(λk−1(si),Minsj∈Γ−1(si)(λ

k−1(sj) + l(sj , si))) pour tout si 6= s1

3. Si λk(si) = λk−1(si) pour tout i alors FINSi k ≤ n− 1 aller en 2 avec k ← k + 1Si k = n alors il existe un circuit absorbant

2.5.2 Exemple d’application

On considère le graphe suivant :

b d

a e

c f

7

8

2

4

1

2

-22

2

3

On obtient alors :

Sommets a b c d e f

Initialisation 0 ∞ ∞ ∞ ∞ ∞Itération 1 0 7 8 ∞ ∞ ∞

Itération 2 0 7 8 11 8 9

Itération 3 0 7 6 10 8 9

Itération 4 0 7 6 10 8 8

Itération 5 0 7 6 10 8 8

On obtient une arborescence de parcours

2.6 Exercices

2.6.1 Exercice 1

Déterminer le graphe potentiel-étapes (graphe PERT) et une arborescence de cheminsminimaux du projet suivant :

Tâches a b c d e f g

Durées 4 3 6 2 8 7 1

Tâches Préalables a,b b c,d,e c

20

2.6.2 Exercice 2

Reprendre l’exemple du paragraphe 4.2 du cours. Dérouler l’algorithme de Dijkstra etdéterminer une arborescence de chemins minimaux.

2.6.3 Exercice 3

Reprendre l’exemple du paragraphe 5.2 cours. Dérouler l’algorithme de Bellman et dé-terminer une arborescence de chemins minimaux.

2.6.4 Exercice 4

Soit G = (S,A, l) un graphe value avec S = {1, . . . , 7, 8, 9}, défini par sa matriceM = (mij)ij telle que mij = l(i, j).

Sommet x Sommet y l(x, y) Sommet x Sommet y l(x, y)

1 4 4 1 5 9

1 7 2 2 9 2

3 2 1 3 9 8

4 8 5 5 2 1

5 3 4 6 9 8

7 3 7 7 8 2

8 2 7 8 3 3

8 6 4

1. Montrez que ce graphe est sans circuit (on pourra donner simplement un ordre topo-logique des sommets, sans justification supplémentaire).

2. Résolvez le problème du plus court chemin de 1 à 9. On justifiera le choix de l’algo-rithme, et on n’oubliera pas de donner à la fin un chemin optimal (pas seulement savaleur).

3. On suppose maintenant que la valeur d’un chemin est non plus la somme des lon-gueurs des arcs mais leur produit. Indiquez comment modifier l’algorithme utiliséà la question 2 pour trouver un chemin minimum (indiquer simplement la/les mo-dification(s) ; il n’est pas nécessaire de prouver la validité du nouvel algorithme).Appliquez votre algorithme modifié sur le graphe donné plus haut, pour trouver unchemin optimal de 1 à 9.

4. On suppose maintenant que la valeur d’un chemin est non plus la somme des lon-gueurs des arcs ni leur produit mais la plus petite longueur des arcs. Indiquez com-ment modifier l’algorithme utilisé à la question 2 pour trouver un chemin maximum.(Indiquer simplement la/les modification(s) ; il n’est pas nécessaire de prouver la va-lidité du nouvel algorithme). Appliquez votre algorithme modifié sur le graphe donnéplus haut, pour trouver un chemin optimal de 1 à 9.

2.6.5 Exercice 5

Une entreprise commande la réalisation d’un projet informatique. Un analyste estchargé de le réaliser et de fournir au plus tôt au client un planning d’exécution du projet.

21

Après avoir recensé les différentes opérations, leurs durées en jours et le matériel ou lepersonnel nécessaire à leur réalisation, on dispose du tableau suivant :

Tâche Tâches antérieures Durée Personnel ou Matériel

A C 5

B L 3 Terminal, Programmeur

C 3 Programmeur

D C 2 Programmeur

E D,I,O 6

F 4 Programmeur

G A,D,N 1

H A,F 3

I C,P 4 Programmeur

J G,H,M 2 Terminal

K B,G,J 4

L 5

M B,H 1

N A,F 4

O D,F,N 5 Terminal

P C 3 Terminal, Programmeur

Q B,H,L 5

Deux Programmeurs et un Terminal sont affectés à ce projet. Toute tâche commencéepar un programmeur doit être achevée par lui.

1. Apres avoir défini le graphe des niveaux, vous tracerez le réseau PERT associe auprojet.

2. Vous tracerez ensuite le chronogramme en portant chaque tache à sa date de débutau plus tôt et en indiquant les marges libres en pointille.

3. Donner le chemin critique et sa durée.

4. Sur le chronogramme, vous noterez en indice des taches et entre parenthèses lesmoyens nécessaires à son exécution en utilisant les codes suivant : T pour Terminalet P pour Programmeur. Vous indiquerez alors les plages horaires ou on ne disposepas de suffisamment de personnel ou de matériel.

5. En utilisant les marges libres des taches, vous proposerez une solution pour remédierle plus efficacement aux problèmes précédents. Le cas échéant, une augmentation dela durée du projet pourra être envisagée.

6. Vous tracerez un nouveau chronogramme qui vous permettra d’établir votre plan-ning : pour chaque tache on indiquera sa date de début au plus tôt et sa date de finau plus tard.

7. Le programmeur affecte à la réalisation de la tache I est absent 3 jours. Cela a-t’ilune répercussion sur le délai du projet ? Même question si le terminal est en pannependant 2 jours a la date 12.

22

Chapitre 3

Réseaux de transport et Flots

3.1 Flot dans un réseau de transport

3.1.1 Réseau de transport

Un réseau de transport est un graphe R = (X,A, c) valué positivement sans boucleayant deux ensembles disjoints S ⊂ X, ensemble des entrées (ou sources) et P ⊂ Xl’ensemble des sorties (ou puits). Les valuations des arcs sont appelées capacités. On verraplus loin qu’on peut, sans perdre en généralité, se ramener à un réseau à une entrée etsortie uniques.On rappelle que pour tout Z ⊂ X on note ω+(Z) (resp. ω−(Z)) l’ensemble des arcssortant (entrant) de Z c’est-à-dire les arcs ayant l’extrémité initiale dans Z (resp. X − Z)et l’extrémité finale dans X − Z (resp. Z).

Exemple

s1 x1 x2 p1

s2

s3 x3 x4 p2

[1]

[4]

[5]

[5][1]

[2]

[2]

[6]

[2]

[3]

[3][2]

[2]

[2]

[8][7]

[2]

3.1.2 Flot

Un flot sur un réseau de transport R = (X,A, c) est une application f : A → N quivérifie :

1. 0 ≤ f(a) ≤ c(a) pour tout a ∈ A

2.∑

a∈ω+({x})f(a) =∑

a∈ω−({x})f(a) pour tout x ∈ X − (S ∪ P )

3.∑

a∈ω+({s})f(a)−∑

a∈ω−({s})f(a) ≥ 0 pour tout s ∈ S et∑

a∈ω−({p})f(a)−∑

a∈ω+({p})f(a) ≥0 pour tout p ∈ P .

23

Si on pose d’une mannière générale pour tout Z ⊂ X, f+(Z) =∑

a∈ω+(Z)f(a) et f−(Z) =∑

a∈ω−(Z)f(a) alors les conditions ci-dessus deviennent

1. 0 ≤ f(a) ≤ c(a) pour tout a ∈ A

2. f+(x) = f−(x) pour tout x ∈ X − (S ∪ P )

3. f+(s)− f−(s) ≥ 0 pour tout s ∈ S et f−(p)− f+(p) ≥ 0 pour tout p ∈ P .

Proposition 13 Avec les notations précédentes, on a : f+(S)− f−(S) = f−(P )− f+(P ).

Preuve :

0 =∑

x∈X(f+(x)− f−(x)) (3.1)

=∑

x∈S(f+(x)− f−(x)) +∑

x∈X−(S∪P )(f+(x)− f−(x)) +

x∈P (f+(x)− f−(x))

(3.2)

=∑

x∈S(f+(x)− f−(x)) +∑

x∈P (f+(x)− f−(x)) (3.3)

= (f+(S)− f−(S)) + (f+(P )− f−(P )). � (3.4)

La quantité f+(S)− f−(S) est le flot résultant sortant de S et f−(P ) − f+(P ) est le flotrésultant entrant dans P . La proposition précédente affirme la loi de conservation pourle flot qui traverse le réseau de transport. On appelle valeur du flot f et on note v(f) laquantité f+(S)− f−(S) = f−(P )− f+(P ).

Proposition 14 L’étude d’un flot dans un réseau de transport quelconque peut toujoursse ramener à l’étude d’un flot dans un réseau de transport à entrée et sortie uniques.

Preuve : Soit R = (X,A, c) un réseau et posons S = {s1, s2, ..., sr} et P = {p1, p2, ..., pt}.A ce réseau, on ajoute un sommet s avec les arcs (s, si) (i = 1, 2, . . . , r) de capacité ∞ et lesommet p avec les arcs (pj , p) (j = 1, 2, . . . , t) de capacité ∞. On obtient ainsi un nouveauréseau R′ à entrée et sortie unique et on pose S′ = {s} et P ′ = {p}. Il reste à montrer quetout flot f sur R correspond à un flot sur R′ de même valeur et inversement.Soit donc f un flot sur R. On définit f ′ comme suit : f ′/A = f et

f ′((s, si)) = f+(si)− f−(si) pour i = 1, 2, . . . , r

etf ′((pj , p)) = f−(pj)− f+(pj) pour j = 1, 2, . . . , t

On vérifie (en exercice) facilement que f ′ est bien un flot sur R′ et que v(f) = v(f ′).Inversement, étant donné un flot sur R′ on en déduit directement un flot sur R de mêmevaleur en considérant sa restriction sur les arcs de R. �

Dans un flot f sur un réseau à une entrée et sortie unique, l’entrée est une source etla sortie est un puits (au sens usuel définit plus haut) et on a : v(f) = f+(s) = f−(p) carf+(p) = f−(s) = 0. En ajoutant au réseau l’arc (p, s) de capacité infinie on obtient unréseau dans lequel la loi de conservation du flot est vérifiée en tout sommet. Dans toutela suite du chapitre, on suppose que les réseaux considérés sont à une entréeet sortie uniques.

Proposition 15 Si R = (X,A, c) un réseau et Z ⊂ X alors f+(Z) = f−(Z)

Preuve : On somme l’égalité de la loi de conservation sur Z. Après des simplificationsappropriées on obtient le résultat. �

24

3.2 Flot maximum et coupe minimum

3.2.1 Définitions et propriétés

Soit R = (X,A, c) un réseau. Une coupe de R est un ensemble d’arcs de R de la formesuivante : K = ω+(Z) où Z ⊂ X tel que s ∈ Z et p /∈ Z. La capacité d’une coupe K estla somme des capacités des arcs de K : c(K) =

a∈K c(a).

Proposition 16 Pour tout flot f et toute coupe K sur un réseau R on a : v(f) ≤ c(K)

Preuve : on a :

c(K) ≥ f+(Z) ≥ f+(Z)− f−(Z) =∑

x∈Z

(f+(x)− f−(x)) = f+(s) = v(f) �

Un flot maximum est un flot de valeur la plus grande possible. De même une coupeminimum est une coupe de capacité la plus petite possible.

Corollaire 2 Pour tout flot f et toute coupe K sur un réseau R si v(f) = c(K) alors fest un flot maximum et K est une coupe minimum.

3.2.2 Chaîne augmentante ou améliorante

Soit R = (X,A, c) un réseau et s et p l’entrée et la sortie de R. Un arc est saturé si leflot qui le traverse est égal à sa capacité. Un chemin ou une chaîne est saturé(e) si il ou ellecontient un arc saturé. Un chemin insaturé allant de s à p est dit chemin augmentant ouaméliorant. Une chaîne augmentante ou améliorante est une chaîne de s à p dont les arcsparcourus dans le sens direct sont insaturés et ceux parcourus dans le sens inverse sonttraversés par un flot strictement positif.

Proposition 17 S’il existe pour un flot f sur un réseau R une chaîne augmentante alorsil existe un flot f ′ tel que v(f) < v(f ′).

Preuve : Soit µ = (a1, . . . , ak) une chaîne augmentante avec a1 = s et ak = p lesextrémités. On note µ+ l’ensemble des arcs de µ parcourus dans le sens de s à p et µ− celuides arcs de µ parcourus dans le sens inverse. On pose :

τ(µ) = Mini=1,2,...,k τ(ai)

où τ(ai) = c(ai)− f(ai) si ai ∈ µ+ et τ(ai) = f(ai) > 0 lorsque ai ∈ µ−. On définit le flotf ′ par :

f ′(a) =

f(a) + τ(µ) si a ∈ µ+

f(a)− τ(µ) si a ∈ µ−

f(a) si a /∈ µ

Vérifier (en exercice) que f ′ est bien un flot sur R. On a v(f ′) = v(f) + τ(µ) et commeτ(µ) > 0, v(f ′) > v(f). �

Proposition 18 S’il n’existe pas pour le flot f sur R une chaîne augmentante alors ilexiste une coupe K telle que c(K) = v(f).

Preuve : Il suffit de prendre K = ω+(Z) avec Z est constitué par s et les sommets xtels qu’il existe une chaîne insaturée allant de s à x. Il est claire que p /∈ Z. Vérifier (en

25

exercice) que pour tout a ∈ K = ω+(Z) on a f(a) = c(a) et que f(a) = 0 si a ∈ ω−(Z).On peut alors écrire :

c(K) = f+(Z) = f+(Z)− f−(Z) =∑

x∈Z

(f+(x)− f−(x)) = f+(s) = v(f). �

Les preuves des propositions suivantes qu’on laisse en exercice, sont des conséquences di-rectes des propositions précédentes.

Proposition 19 Un flot sur un réseau est maximum si et seulement s’il n’existe pas dechaîne augmentante. �

Proposition 20 Dans un réseau la valeur d’un flot maximum est égale à la capacité d’unecoupe minimum. �

3.3 Algorithme de Ford-Fulkerson

Soit R = (X,A, c) un réseau, s son entrée et p sa sortie. Un flot sur R est dit complets’il n’existe pas de chemin insaturé allant de s à p.

3.3.1 Algorithme de recherche d’un flot complet

On part d’un flot f (par exemple tel que v(f) = 0) et on l’améliore pas à pas par uneprocédure de marquage.

algorithme

1. Marquer s

2. Soit x un sommet marqué et non encore examiné ;Marquer y par (+x) si y est un successeur non marqué de x avec f(x, y) < c(x, y)

3. Si p est marqué (on a un chemin augmentant), aller en (4)Si tous les sommets marqués sont examinés alors le flot est complet ;sinon aller en (2)

4. Améliorer le flotEffacer les marquesAller en (1)

Exemple

En trois dépôts A,B,C, on dispose respectivement de 20, 35 et 10 tonnes de marchan-dises. On a des demandes de 25, 20 et 20 tonnes de marchandises aux destinations D,E,F .Il existe des possibilités de transport à l’aide de camoins. Ces possibilités sont rapportéesdans le tableau suivant :

D E F

A 15 10 0

B 15 5 5

C 5 0 10

Déterminer un plan de transport permettant de transporter des dépôts aux destinationsune quantité maximum.

26

Ce problème se modélise aisément par un réseau de transport R :

A D

s B E p

C F

[20]

[35]

[10]

[15]

[10][15]

[5]

[5]

[5]

[10]

[25]

[20]

[20]

On applique l’algorithme et on obtient les chemins améliorants suivants :

Chemins τ

sADp 15

sAEp 5

sBDp 10

sBEp 5

sBFp 5

sCFp 10

Le flot obtenu a pour valeur 50 et il est complet (justifier).

3.3.2 Algorithme de recherche d’un flot maximum (Ford-Fulkerson)

On part, par exemple d’un flot complet. On l’améliore tant qu’il existe des chaînesaugmentantes.

algorithme

1. Marquer l’entrée s

2. Soit x un sommet marqué non examiné

Etudier tous les successeurs y de x :Marquer y par (+x) s’il est non marqué et si f(x, y) < c(x, y).

Etudier tous les prédécesseurs z de x :Marquer z par (−x) s’il est non marqué et si f(z, x) > 0

3. Si p est marqué (on a une chaîne augmentante), aller en (4)S’il reste des sommets marqués non examinés aller (2)sinon le flot est maximum, FIN.

4. Améliorer le flot à l’aide de la chaîne améliorante ayant permis de marquer p.Effacer les marques et aller en (1)

En application de l’algorithme à l’exemple précédent on obtient un flot maximum devaleur 55. Une coupe minimale est K = ω+(Z) avec Z = {s,B}. Elle est telle que tous lesarcs a ∈ ω+(Z) sont saturés et le flot qui traverse tout arc a ∈ ω−(Z) est nul sauf le flottraversant l’arc (p, s).

27

3.4 Exercices

3.4.1 Exercice 1

Prouver que le flot rapporté ci-dessous n’est pas maximal. L’augmenter. Combien ya-t-il de flots de valeur maximale ? La valuation des arcs represente le flot sur la capacité.

B

s A C F

D p

E

10/20

10/10

0/10

10/10

10/10

0/10

0/10

10/10

10/10

10/20

3.4.2 Exercice 2

On considère dans cet exercice un problème de transport de marchandises. Plus pré-cisément, une entreprise extrait une matière première sur trois sites de production p1, p2

et p3. L’entreprise possède trois usines u1, u2 et u3. Des camions permettent d’amener lamatière première des sites de productions aux usines. Plus précisément, la matière extraiteen p1 peut être amenée en u1 et u2, celle extraite en p2 peut être amenée en u1, u2 et u3,celle extraite en p3 peut être amenée en u2 et u3. Dans les usines, la matière première estutilisée pour fabriquer des produits destinés à la vente.

Le but pour l’entreprise est de produire le plus possible, donc d’utiliser le maximum dematière première. Les trois sites de productions p1, p2 et p3 peuvent extraire au maximumrespectivement 15, 15 et 25 milliers de tonnes (Mt) de matière. Les capacités des liaisonsentre un site pi et une usine uj sont de 10 Mt de matière première. Enfin, en raison decapacité de production limitée, l’usine u1 peut utiliser au maximum 30 Mt de matièrepremière, l’usine u2 au maximum 15 Mt et l’usine u3 au maximum 30 Mt.

1. Modéliser la situation par un réseau de transport.

2. Faites passer un flot où de p1 partent 10 Mt vers u1 et 5 Mt vers u2, de p2 partent 5Mt vers u1, 5 Mt vers u2 et 5 Mt vers u3, de p3 partent 5 Mt vers u2 et 10 Mt versu3. Ce flot est-il complet ?

3. Appliquez l’algorithme de Ford et Fulkerson pour trouver un flot maximum. Donnezégalement une coupe de capacité minimum.

4. On voudrait modéliser les deux nouvelles contraintes suivantes.

(a) En raison de limites sur les engins travaillant sur les sites p1 et p2, la quantitétotale de matière première extraite sur les sites p1 et p2 ne peut dépasser 25.

(b) En raison de limites sur les personnels travaillant dans les usines p2 et p3, laquantité totale de matière utilisée dans les usines u2 et u3 ne peut dépasser 35.

28

3.4.3 Exercice 3

Soit G = (S,A) un graphe orienté, et soient s et t deux sommets particuliers. Un s− t-chemin est un chemin orienté débutant en s et terminant en t. Deux s − t-chemins sontdits arc-disjoints s’ils n’ont pas d’arc en commun (mais ils peuvent avoir des sommets encommun).

0 8

4

1 6 t

s 5 7 9

2

3

Quel est le nombre maximal de s− t-chemins arc-disjoints de la figure ? Cette solutionest-elle unique ? Justifiez vos réponses (on pourra modéliser ce problème avec des flots).

29

Chapitre 4

Graphe non orienté et Problème de

l’arbre couvrant minimum

4.1 Graphe non orienté

Lorsque l’orientation des arcs ne joue aucun rôle, on parle de graphe non orienté ousimplement de graphe. Plus formellement on a :

4.1.1 Définition

Un graphe non orienté G est défini par la donnée d’un ensemble S dont les élémentssont appelés des sommets ou noeuds et d’un ensemble E dont les éléments sont des sousensembles à 1 ou 2 éléments de S appelées arêtes. On le note G = (S,E). Le nombre n desommets de G est appelé l’ordre de G et le nombre m des arêtes de G est appelée la taillede G.

Exemple

Soit G = (S,E) le graphe défini par : S = {x, y, z} et E = {a, b, c, d} où b = {z, x},c = {x, y} et d = {z, y}.

z

y

x

c

b

d

Etant donnée une arête u = {x, y}, on dit que les sommets x et y sont les extrémitésde u. On dit également de les sommets x et y sont adjacents et que l’arc u est incident àx et y.

30

4.1.2 Arêtes et degré

Deux arêtes sont adjacentes si elles sont incidentes à au moins une extrémité commune.Le degré du sommet x, noté dG(x) ou plus simplement d(x) est le nombre d’arêtes ayantx pour extréminté.

Les resultats (Proposition et Corollaire) du paragraphe 1.1.2 restent valables.Etant donné X ⊂ S, on appelle cocycle de G l’ensemble w(X) des arêtes ayant une

extrémité dans X et l’autre extrémité dans S −X.

4.1.3 Chaîne, chaîne élémentaire, cycle, cycle élémentaire

Une Chaîne de longueur k est une suite µ = e1, e2, . . . , ek de k arêtes telle que deuxarêtes consécutives sont adjacentes. On notera µ = x1e1x2 . . . xkekxk+1, si l’on veut préci-ser les sommets rencontrés. Les sommets x1 et xk sont appelés les extrémités de la chaîneµ. On dit que la chaîne µ rélie les sommets x1 et xk.

Une chaîne élémentaire est un chaîne telle qu’en la parcourant, on ne rencontre pasdeux fois le même sommet. De façon équivalente, on peut définir un chaîne comme unechaîne dont les sommets sont tous de degré 2 sauf ses extrémintés. La proposition 2 estvalable pour les chaînes.

Un cycle est une chaîne dont les extrémités coïncident.

Un cycle élémentaire est un cycle minimal pour l’inclusion i.e ne contenant strictementaucun autre cycle.

4.2 Représentation d’un graphe

4.2.1 Cas des graphes non orientés

Matrice d’incidence (sommets-arêtes)

La matrice d’incidence sommets-arêtes d’un graphe non orienté G = (S,E) est la ma-trice P = (pxu) à coefficients entiers : 0 et 1 tels que pour tout u = {x, y} ∈ E, tous lescoefficients de la colonne u sont nuls sauf pxu = pyu = 1.

Si x est une ligne de P alors

w(x) = {u / pxu = 1}

Exemple

1 2

4 3

a

bc

d

e

On obtient la matrice d’incidence :

31

1 1 0 0 01 0 1 1 00 1 1 0 10 0 0 1 1

Matrice d’adjacence (sommets-sommets)

La matrice d’adjacence sommets-sommets d’un graphe non orienté G = (S,E) est lamatrice Q = (qxy) à coefficients entiers : 0 et 1 tels que pour tout x et y dans S on a :

qxy = 1 si et seulement si {x, y} ∈ A.

La matrice d’adjacence de l’exemple précédent est

0 1 1 01 0 1 11 1 0 10 1 1 0

Tableaux α et β

On considère ici que les sommets rangés et sont désignés par leur rang. Ainsi on poseS = {1, 2, . . . , n}. Les tableaux α() et β() sont respectivement des matrices unilignes dedimension n + 1 et 2m. Pour chaque sommet i, la liste des sommets successeurs de i estcontenue dans le tableau β() à partir de la case numéro α(i). Et donc l’ensemble dessuccesseurs de i est contenu entre les cases α(i) et α(i + 1)− 1 du tableau β().

{

α(1) = 1α(i + 1) = d(i) + α(i)

4.3 Quelques graphes particuliers

Soient G = (S,X) un graphe (orienté ou non), A une partie de S et Y une partie deX.

On appelle sous-graphe engendré par A, le graphe noté GA dont les sommets sont leséléments de A et dont les arcs ou arêtes sont les arcs ou arêtes de G ayant leurs deuxextrémités dans A.

On appelle graphe partiel engendré par Y , le graphe noté G[Y ] ayant le même ensembleX de sommets que G et dont les arcs ou arêtes sont ceux de Y .

Le sous-graphe partiel engendré par A et Y est le graphe partiel de GA engendré par Y .

On dit G est simple (resp. strict) si G est non orienté (resp. orienté), sans boucle etdeux sommets quelconques sont tous deux incidents à au plus une arête (resp. un arc). SiG est strict alors le graphe complémentaire de G a le même ensemble de sommets que Get comme arcs les arcs complémentaires à X :

(x, y) ∈ X → (x, y) /∈ X

32

(x, y) /∈ X → (x, y) ∈ X

On dit que G est biparti si l’ensemble des sommets S peut être partitionné en deuxsous ensembles S1 et S2 de tel sorte que, toute arête a une extrémité dans S1 et l’autredans S2.

On dit que G est complet si G est simple (resp. strict) tel que deux sommets distinctsquelconques sont reliés par une seule arête (resp. un seul arc).

4.4 Définitions et propriétés des arbres

Un arbre est un graphe simple connexe sans cycles. Un graphe simple sans cycles quin’est pas nécessairement connexe est appelé une forêt (chaque composante connexe est unarbre). Une chaîne élémentaire est un arbre.

Exemples d’arbre

a b d

e c f 1 2 3 4

g h i

Proposition 21 Un arbre tel que n ≥ 2 possède au moins deux sommets pendants (ie dedegré 1).

Preuve : Il suffit de considérer une chaîne µ = {s0, e1, s1, . . . , sk−1, ek, sk} de longueurla plus grande possible (maximale) où k ≥ 1 car n ≥ 2. On montre par l’absurde ques0 et sk sont des sommets pendants. Par exemple supposons que s0 n’est pas pendantalors il existerait une arête f 6= e1 incidente à s0 et soit y l’autre sommet incident à f . Siy ∈ {s0, s1, . . . , sk} alors l’arbre contiendrait un cycle ce qui est absurde ; sinon la chaîneσ = {y, f, s0, e1, s1, . . . , sk−1, ek, sk} contiendrait µ ce qui est également absurde. �

Proposition 22 Si G est un arbre alors m = n− 1.

Preuve : On fait une preuve par récurrence sur n. Il est facile d’établir le résultat pourn = 1 car un arbre ne peut contenir une boucle. On suppose que n > 1. D’après laproposition 21, il existe un sommet pendant s. Il est facile de voir que le graphe G′ = G−{s}est un arbre et donc par hypothèse de récurrence on a : mG′ = nG′−1. Comme mG′ = mG−1et nG′ = nG − 1 on obtient mG = nG − 1. �

Proposition 23 Dans un arbre, deux sommets quelconque sont reliés par une chaîne élé-mentaire unique.

33

Preuve : Soient x et y deux sommets d’un arbre. Il existe une chaîne élémentaire quirelie x et y car le graphe est connexe et supposons qu’il existe une autre chaîne distinctede la précédente qui les relie. En concaténant les deux chaînes on obtient un cycle ce quicontredit le fait que le graphe est acyclique.�

Proposition 24 Une arête e ∈ E est un isthme de G = (S,E) si et seulement si en’appartient à aucun cycle de G

Preuve : Soit G = (S,E) un graphe connexe (cela suffit). Si e = {s, t} ∈ E n’est pasun isthme alors il existe dans G − {e} une chaîne µ reliant s et t les extrémités de e etdonc en concaténant µ et e on obtient un cycle contenant e. Donc si e n’appartient àaucun cycle de G alors e est un isthme. Inversement supposons que e appartient à un cyclec = (s0, e, s1, e2, s2, . . . , sk−1, ek, s0) et x et y deux sommets de G − {e}. Comme G estconnexe il existe une chaîne σ = {x = t0, f1, t1, f2, . . . , tk−1, fk, tk = y} qui relie x et y.Si σ est G − {e} alors G − {e} est connexe et e n’est pas un isthme. Sinon e = fi aveci = 1, . . . , k et posons s0 = ti−1 et s1 = ti. Il suffit de considérer la chaîne obtenu parla concaténation des trois chaînes suivantes : {x = t0, f1, . . . , ti−1}, {s1, e2, . . . , ek, s0} et{ti, fi+1, . . . , fk, tk = y}. Elle est dans G− {e} et donc G− {e} est connexe. Donc si e estun isthme alors e n’appartient à aucun cycle de G. �

Corollaire 3 Toute arête d’un arbre est un isthme. �

Théorème 1 Soit G un graphe. Les assertions suivantes sont équivalentes :

1. G est un arbre.

2. G est connexe et m = n− 1.

3. G est acyclique et m = n− 1.

4. G est connexe et toute arête est un isthme.

5. Deux sommets quelconques de G sont reliés par une et une seule chaîne élémentaire.

Preuve : (En exercice)

4.5 Arbre couvrant

Soit G = (S,E) un graphe. Un arbre de G ou encore arbre couvrant de G est un graphepartiel connexe et sans cycle de G. une forêt de G ou encore forêt couvrante de G est ungraphe partiel sans cycle de G (non nécessairement connexe).

Proposition 25 Tout graphe connexe a un arbre couvrant.

Preuve : Il suffit de supprimer tous les isthmes. �

Corollaire 4 Si G est connexe alors m ≥ n − 1 et on a l’égalité si et seulement si G estun arbre.

Preuve : G admet un arbre T couvrant, donc m ≥ mT = nT − 1 = n − 1. comme T estun graphe partiel de G le cas de l’égalité n’est possible que lorsque G = T . �

Proposition 26 Un graphe partiel d’un graphe connexe G est un arbre couvrant de G siet seulement s’il est connexe et minimal par rapport à la suppression d’arêtes.

34

Preuve : Soit H un graphe partiel d’un graphe connexe G.Si H est un arbre couvrant de G alors H est connexe et toute arête e de H y est unisthme donc H − {e} n’est pas connexe. Réciproquement supposons que H est connexe etminimal par rapport à la suppression d’arêtes. Donc la suppression d’une arête quelconquee de H augmente le nombre de composante connexe de H et l’arête e est un isthme. Donce n’appartient à aucun cycle et par conséquence H est acyclique et donc H est un arbrecouvrant. �

Proposition 27 Un graphe partiel d’un graphe connexe G est un arbre couvrant de G siet seulement s’il est acyclique et maximal par rapport à l’ajout d’arêtes.

Preuve : Soit H un graphe partiel d’un graphe connexe G.Si H est un arbre couvrant alors H est acyclique et soit e une arête quelconque de G n’ap-partenant pas à H. Il existe une chaîne µ = {x, e1, x1, . . . , xk−1, ek, y} reliant les extrémitésx et y de e. En concaténant µ et e on obtient le cycle C = (x, e1, x1, . . . , xk−1, ek, y, e, x) ;ce qui établit que la condition est nécessaire. Pour montrer qu’elle est suffisante supposonsque H est acyclique et maximal par rapport à l’ajout d’arêtes. soient x et y deux sommetsquelconques de H, il existe dans G une chaîne unique µ = {x0 = x, e1, x1, . . . , xk−1, ek, xk =y}. Si toutes les arêtes ei avec i = 1, 2, . . . , k sont dans H alors H est connexe. Si-non on construit à partir de µ une chaîne dans H réliant x et y de la façon suivante :Pour toute arête ei qui n’est pas dans H, il existe dans H une chaîne unique σi ={xi−1, ei1 , xi1 , . . . , eik , xi} qui rélie xi−1 et xi. On remplace xi−1, ei, xi dans µ par σi. �

4.6 Problème de l’arbre couvrant

Soient G = (S,E, l) un graphe valué et H un arbre couvrant de G. On appelle poids deH et on note l(H) la somme des poids des arêtes de H. Le problème de l’arbre couvrantminimum est la déterminantion d’un arbre couvrant de poids le plus petit possible. Onprésente ici deux algorithmes : celui de Kruskal et celui de Prim.

4.6.1 Méthode de Kruskal

Algorithme

Initialisation F = E et EH = ∅

Tant que |EH | < n− 1 Faire

Selectionner e ∈ F tel que l(e) soit minimum.F = F − {e}

Si G[EH ∪ {e}] est acyclique alors EH = EH ∪ {e}

Fin Tant que

Exemple

On considère le graphe connexe suivant :

35

c f

a b e h

d g

11

5

12

10

1

2

13

3

6

4

7

8

En appliquant Kruskal on obtient l’arbre couvrant minimum suivant :

c f

a b e h

d g

5

1

2

3

6

4

7

Le poids de l’arbre est 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28.

4.6.2 Méthode de Prim

Soit G = (S,E, l) un graphe connexe valué. La méthode consiste à construire de procheen proche un arbre couvrant minimum H = (T, F ). Pour ce faire on fixe un sommetquelconque s0.

Algorithme

Initialisation T = {s0}, θ = ω(s0) et F = ∅ ;

Tant que S − T 6= ∅ FaireSelectionner e ∈ θ tel que l(e) soit minimum.Soit si l’extrémité qui n’est pas dans T ;F = F ∪ {e}, T = T ∪ {si} et θ = (θ ∪ ω(si))− (θ ∩ ω(si))

Fin Tant que

4.7 Exercices

4.7.1 Exercice 1

Déterminer tous les arbres ayant six sommets.

4.7.2 Exercice 2

Montrer qu’un arbre qui a exactement deux sommets pendants est une chaîne élémen-taire.

36

4.7.3 Exercice 3

Montrer qu’un arbre a au moins ∆ sommets pendants (∆ est le degré maximum).

4.7.4 Exercice 4

Montrer qu’une arête e d’un graphe G, connexe appartient à tout arbre couvrant de Gsi et seulement si e est un isthme de G.

4.7.5 Exercice 5

Montrer que dans un graphe connexe G, une arête e est une boucle si et seulement sie n’appartient à aucun arbre couvrant de G.

4.7.6 Exercice 6

Soit G = (X,E), un graphe connexe. On appelle distance de deux sommets x et y deG la plus petite longueur des chaînes qui relient x et y, et on note d(x, y) cette distance.On appelle centre du graphe G tout sommet x tel que la quantité Maxy∈Xd(x, y) soit laplus petite possible.

Montrer que si G est un arbre alors il a soit un centre soit deux centres qui sont alorsvoisins.

4.7.7 Exercice 7

Soit G = (X,E) le graphe valué défini par sa matrice d’adjacence M .

x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12

x1 1 4

x2 1 4

x3 4

x4 4 4 1 5

x5 1 4

x6 4 7

x7 5 2

x8 1 2

x9 1 3

x10 3 4 7

x11 4 3

x12 4 7 2 2 7 3

1. En détaillant bien toutes les étapes, appliquez l’algorithme de Kruskal sur le grapheG. Quel est le poids d’un arbre couvrant de poids minimal ?

2. En utilisant le même graphe que la question précédente, calculer le poids d’un arbrecouvrant de poids maximum. Donner un arbre de poids couvrant maximal.

3. Discuter des différences fondamentales entre l’algorithme de Kruskal et l’algorithmede Prim. Comment résumer ces différences ?

4. Appliquez l’algorithme de Prim vu en cours pour calculer un arbre couvrant de poidsminimal du graphe G.

37

4.7.8 Exercice 8

La circulation en saison pluvieuse est difficile en zone forestières. Il convient alors dedéterminer les itinéraires les plus praticables entre tout couple de villages d’un cantonconsidèrée. Pour chaque tronçon routier, on dispose d’une évaluation notée entre 0 et 5traduisant l’état du tronçon (0 : tronçon totalement praticable, 5 : tronçon totalementimpraticable). On suppose ici que chaque tronçon est à double sens et que l’évaluation estla même pour chacun des sens.

On considère un graphe G = (X,U) non orienté, où X est l’ensemble des villages ducanton et U l’ensemble des tronçons ; chaque arête u de U étant munie d’une évaluationl(u) représentant l’état du tronçon u. La recherche d’itinéraires les plus praticables peutse formuler comme un problème de recherche des chaînes minimax entre toute paire desommets du graphe. Dans ce problème, une chaîne µ a pour valeur l(µ) la plus grandevaluation des arêtes de la chaîne, c’est-à-dire l(µ) = Maxu∈µ{l(u)}. On cherche donc àdéterminer, entre deux sommets quelconques du graphe, une chaîne de valeur minimale.Soit A∗ un arbre couvrant de valeur minimale de G.

Partie 1 On considère le canton représenté par le graphe G1 = (X1, U1) suivant :

2 6

1 3 5 7 9

4 8

2

5

1

54

4

4

5

3

4

3

2

34

4

2

1. Déterminer A∗1 un arbre couvrant de valeur minimale de G1.

2. Considérons sur A∗1 la chaîne µ(x, y) joignant deux sommets quelconques x et y et

umax l’arête ou l’une des arêtes de plus forte valuation appartenant à cette chaîne.Soit S et X1 − S les deux composantes connexes obtenue en supprimant umax dansA∗

1 et w(S) le cocycle de S dans G1.

(a) Considérant la chaîne µ(2, 9) de A∗1, déterminer umax et w(S). Vérifier que toute

arête de w(S) est de valeur supérieure ou égale à l(umax).

(b) Déterminer dans G1, un itinéraire le plus praticable entre 2 et 9. Cet itinéraireest-il unique ? justifier.

Partie 2 On se place dans le cas général et on considère que le canton est représentépar un graphe G = (X,U).

1. Montrer que la propriété de la question (2a) est vraie dans le cas général.

2. Montrer que toute chaîne µ(x, y) de A∗ est une chaîne minimax de x à y dans G.(NB : Il s’agit de montrer qu’elle est minimale).

3. Proposer une méthode générale pour déterminer les chaînes minimax reliant toutepaire de sommets. Suggérer une façon de discriminer parmi les éventuelles chaînesminimax multiples.

38

Bibliographie

[1] C. Berge, Graphes, Gauthier-Villars, 1983

[2] C. Berge, Hypergraphs : Combinatorics of Finite sets, Vol. 45 of North-Holland Ma-thematical library, Elsevier Science Publ. B.V., Amsterdam, 1989.

[3] M. Gondran et M. Minoux, Graphes et Algorithmes, Eyrolles, 1993.

[4] J.C. Fournier, Théorie des Graphes et Applications, Hermes-Lavoisier.

[5] Roseaux, Exercices résolus de Recherche Opérationnelle tome 1 : Graphe.

39