Vous êtes sur la page 1sur 40

QUELQUES PROBLEMES DANS GRAPHES

Maria ZRIKEM

Ensa de Marrakech, 2011-2012

Problème de coloration des sommets d’un graphe

Colorer les sommets d’un graphe G=(X,U) consiste à leur affecter des couleurs, ou tout autre identificateurs, de telle sorte que deux sommets

adjacents n’aient la même couleur. Si k couleur sont utilisés, on parle

d’une k-coloration.

On vérifie directement qu’une k-coloration est une partition de X en k sous-ensemble stables, chacun entre eux contenant les sommets de

même couleur.

Le nombre chromatique de G, note (G), est la plus petite valeur de K pour laquelle il existe une k-coloation des sommets. Une coloration des sommets en (G) couleurs, est une coloration minimale.

De nombreux problèmes concrets, tels que certains problèmes d’horaire et d’allocation de ressources, peuvent se ramener à la recherche d’une coloration minimale des sommets d’un graphe.

Rappel ; un graphe est biparti ssi (G)=2.

Coloration des sommets d’un graphe

{x1,x5,x8}; {x2, x6, x4}; {x3, x7} est une 3-

coloration. Elle est minimale.

7 2 1 6 3 5 4 8
7
2
1
6
3
5
4
8

Coloration des sommets d’un graphe

Algorithme de Welsh et Pawell (coloration selon les degrés)

Soit G=(X,U) un graphe.

(1)

Numéroter les sommets suivants l’ordre décroissent de leurs degrés, i=1, N=X.

(2)

Donner au sommet qui a le plus petit numéro la couleur i.

(3)

Soit Ni l’ensemble des sommets non colorés qui ne sont adjacents à

aucun sommet de couleur i.

Si Ni faire N=Ni et aller en (2)

Sinon aller en (4)

(4)

Poser N=l’ensemble des sommets non encore colorés

Si N  faire i=i+1 et aller en (2)

Sinon on a une coloration en i couleurs.

Algorithme de Welsh et Powell

Exemple :

7 1 2 6 3 5 4 8
7
1
2
6
3
5
4
8

Bornes pour le nombre chromatique

Les bornes inférieures

 

(

G

)

n ( n 

n

(

n

d

min

 

)

 

(

G

)

(

G

)

(

G

)

n

2

n 2 ( n 2

(

n

2

2

m

)

(

G

)

n  ( G

n

(

G

)

Les bornes supérieures

 

(

G

)

d

max

1

(

G

)

1

  

n

(

G

)

(

G

)

k

 

max min[ ,

i d x

(

x X

i

)

1]

d min est le degré minimum des sommets du graphe

(G) est le cardinal de la plus grande clique

d max est le degré maximum des sommets du graphe

d(x i ) est le degré du sommet x i et k le nombre de couleurs fournies par l’algo de welsh et powell

Bornes pour le nombre chromatique

7 1 2 6 3 5 4 8 n  G ( )]
7
1
2
6
3
5
4
8
n  G
(
)]

Exemple :

2 2  ( G  ) max[ n ( n  d ), 
2
2
 (
G 
)
max[
n
(
n  d
),
 G
(
),
n
(
n
2
m
) ,
min
 max[ 4 / 3, 3, 8 / 5, 8 / 3]
 3
 ( G  ) min[ d  n   G k 1, 1
 (
G 
)
min[
d
 n   G k
1,
1
(
),
]
max
 min[6, 3, 5]
 3

Problème du couplage maximum

Définitions :

Soit G=(X,U) un graphe non orienté.

Un ensemble C d’arêtes est un couplage si deux arêtes quelconques de C

n’ont aucune extrémité en commun. Un couplage est dit maximum lorsqu’il est de cardinalité maximale.

Le concept de couplage maximum revêt une importance particulière dans les graphes bipartis et permet notamment de résoudre certains problèmes d’affectation optimale de personnel

Exemple : une entreprise employant 4 ouvriers doit effectuer 4 travaux. Les affectations possibles sont :

L’ouvrier x1 est qualifié pour les travaux y1, y2 L’ouvrier x2 est qualifié pour les travaux y1, y3 L’ouvrier x3 est qualifié pour les travaux y3, y4 L’ouvrier x4 est qualifié pour les travaux y4

La société peut-elle réaliser les 4 travaux? Dans l’affirmative, comment doit- elle affecter les ouvriers aux postes de travail?

Couplage maximum

L’ouvrier x1 est qualifié pour les travaux y1, y2 L’ouvrier x2 est qualifié pour les travaux y1, y3 L’ouvrier x3 est qualifié pour les travaux y3, y4

L’ouvrier x4 est qualifié pour les travaux y4

Construisons le graphe biparti G=(XY,U) suivant, où une arête relie x i à y j si l’ouvrier x i est qualifié pour le travail y j

x y 1 1 x y 2 2 x y 3 3 x y 4
x
y
1
1
x
y
2
2
x
y
3
3
x
y
4
4

Une affectation optimale des ouvriers correspond à un couplage maximum dans le graphe G :

{(x1, y2), (x2,y1), (x3,y3), (x4,y4)} est un couplage maximum.

Algorithme d’obtention d’un couplage maximum dans un graphe biparti

G=(X Y, U) un graphe biparti .

l’algorithme procède par marquage de sommets non marqués de X ou de Y, à partir de sommets marqués, respectivement de Y ou de X . Notons X M (resp Y M ) l’ensemble des sommets marqués de X (resp Y) et X N (resp Y N ) l’ensemble des sommets complémentaires non marqués de X (resp de Y)

un sommet est saturée par un couplage sil est extrémité d’une arête du couplage (un couplage parfait sature tout les sommets du graphe).

Algorithme d’obtention d’un couplage maximum dans un graphe biparti

G=(XY,U)

d’un couplage maximum dans un graphe biparti G=(X  Y,U) Calculer un couplage initial C non

Calculer un couplage initial C

non

X M =Y M =, X N =X, Y N =Y
X M =Y M =, X N =X, Y N =Y
 xX\C Supprimer dans C toutes les arêtes de C Qui oui sont reprises dans
 xX\C
Supprimer dans C toutes les arêtes de C Qui
oui
sont reprises dans A;
Marquer + un tel sommet x
X M =X M {x}, X N =X N \{x}
Ajouter dans C toutes les arêtes C qui sont
reprises dans A
non
 y(x)Y N
(1)
oui
Marquer +x un tel sommet y
Y M =Y M {y}, Y N =Y N \{y}
Soit y*  Y M \C;
Déterminer la chaine A={x,…,y*}
commençant en un sommet x marqué +
et qui a conduit au marquage de y*
non
x(y)C  X N,
Où y Y M
(2)
oui
Marquer -y un tel sommet x
X M =X M {x}, X N =X N \{x}
(1)
existe-t-il un sommet y non
marqué adjacent à x (marqué)
Tous les y Y
appartiennent à C
non
M
(2)
oui
C contient-il un sommet x non
marqué adjacent à un sommet
y marqué
STOP. Le couplage C obtenu est un couplage maximum

Algorithme d’obtention d’un couplage maximum dans un graphe biparti

Exemple :

Considérons par exemple le couplage initial c={e 1 ,e 4 , e 6 ) Etape1 :

Seul le sommet x

successivement les sommets suivants

n’est pas saturé par C, nous marquons

4

x 1 e 1 y 1 e 2 e 3 x 2 y 2 e
x 1
e 1
y 1
e 2
e 3
x 2
y 2
e 4
e 5
x 3
y 3
e 6
e 7
x 4
y 4

sommets

x

4

y

4

x

3

y

3

x

2

y

1

x

1

y

2

marques

+

(+, x 4 )

(-, y 4 )

(+, x 3 )

(-, y 3 )

(+, x 2 )

(-, y 1 )

(+, x 1 )

Observons que y 2 est marqué mais n’appartient pas à C. Déterminons la chaîne alternée A qui a permis de marquer y 2 : A={e 7 ,e 6 , e 5 , e 4 , e 3 , e 1 , e 2 )

Pour obtenir le nouveau couplage, nous supprimons dans C les arêtes qui appartiennent à la fois à C et à A (i.e. e 1 , e 4 , e 6 ) et nous les remplaçons par les arêtes qui appartiennent à A mais pas à C (i.e. e 2 , e 3 , e 5 , e 7 )

Étape 2 :

Tous les sommets de X appartiennent à C, le couplage obtenu à l’étape 1 est un couplage maximum.

Coloration des arêtes d’un graphe

Colorer les arêtes d’un graphe G=(X,U) consiste à leur affecter des couleurs, de telle sorte que deux arêtes adjacents n’aient pas la même

couleur. Si k couleur sont utilisés, on parle d’une k-coloration.

On vérifie directement qu’une k-coloration des arêtes de G est une partition de U en k couplages, chacun entre eux contenant les arêtes de même couleur.

L’indice chromatique de G, note (G), est la plus petite valeur de K pour

laquelle il existe une k-coloation des arêtes. Une coloration des sommets en (G) couleurs, est une coloration minimale.

De nombreux problèmes concrets, tels que certains problèmes d’horaire et d’allocation de ressources, peuvent se ramener à la recherche d’une coloration minimale des sommets d’un graphe

Bornes pour l’indice chromatique

d max

G d

(

)

max

1

d max est le degré maximum des sommets du graphe

Si G est biparti alors

(G ) d

max

Nombre cyclomatique

Soit G=(X,U) un multigraphe avec n sommets, m arêtes et p composantes connexes. Le nombre cyclomatique de G est :

( G ) m n p

Théorème :

Pour tout multigraphe G, on a (G)0. De plus (G)=0 si et seulement si G est sans cycle.

Nombre d’arcs dans un graphe

Si G est connexe alors m n-1.

Si G est sans cycle alors m n-1.

Arbres et forêts

Un graphe (non orienté) sans cycle est une forêt.

Un graphe (non orienté) sans cycle est connexe est un arbre.

graphe (non orienté) sans cycle est connexe est un arbre . Une forêt U n a
graphe (non orienté) sans cycle est connexe est un arbre . Une forêt U n a
graphe (non orienté) sans cycle est connexe est un arbre . Une forêt U n a

Une forêt

orienté) sans cycle est connexe est un arbre . Une forêt U n a r b

Un arbre

Remarque : les forêts et les arbres sont des graphes simples et chaque composante connexe d’une forêt est un arbre.

Racine et arborescence

Un sommet r d’un graphe G est une racine de G s’il existe un chemin joignant r à chaque sommet du graphe G.

Un graphe G est une arborescence de racine r si G est un arbre et r une

racine.

A C G B D H I
A
C
G
B
D
H
I

G est une arborescence de racine A

Caractérisation des arbres

Soit G=(X,U) un graphe de n sommets. Les affirmations suivantes sont équivalentes :

(a)

G est un arbre

(b)

G est connexe et sans cycle

(c)

G est sans cycle et comporte n-1 arêtes

(d)

g est connexe et comporte n-1 arêtes

(e)

G est sans cycle et en ajoutant une arête quelconque on crée un cycle et un seul

(f)

G est connexe et en supprimons une arêtes quelconque, on le rend

non connexe

(g)

Chaque paire de sommets distincts de G est reliée par une et une seule chaîne simple

Arbre partiel de poids minimum

Soit G=(X,U) un graphe valué simple et connexe.

Un graphe partiel de G sans cycle est un arbre couvrant de G.

Un arbre couvrant de poids minimum est un arbre couvrant dont la somme des poids des arêtes est minimale.

La construction d’un arbre de poids minimum dans un graphe a de

nombreuses applications, notamment dans certains problèmes de

distribution et de télécommunications.

Problème d’arbre partiel de poids minimum

Exemple

Le problème abordé ici correspond à la minimisation du coût de

construction d’un réseau minimal de communication connaissant le coût de chaque liaison possible entre les nœuds du réseau à construire. Puisque on cherche un réseau minimale, on cherche un arbre couvrant (i.e. le graphe induit connexe qui a le minimum d’arêtes). On doit de plus

tenir compte du coût de construction : on cherche donc un arbre

couvrant minimal.

3 6 3 6 2 6 7 6 4 8 5
3
6
3
6
2
6
7
6
4
8
5

3

Algorithmes d’arbre partiel de poids minimum

Algorithme de KRUSKAL

C’est un algorithme glouton qui repose sur le fait qu’un arbre couvrant d’un

graphe d’ordre n a n-1 arêtes et est acyclique.

(1)

marquer l’arête de poids minimum

(2)

soit T l’ensemble des arêtes marquées

si |T|=n-1 alors aller en 4

(3)

parmi les arêtes qui ne forment pas un cycle avec T marquer celle de

valeur minimale et aller en (2)

(4) T fournit l’arbre couvrant minimal

y y 2 2 x x 5 5 6 3 3 4 z z 2
y
y
2
2
x
x
5
5
6
3
3
4
z z
2
2
2
u
1 1

v

u 1
u
1

v

y 2 x
y
2
x
u 1
u
1

v

x

z 2 u 1
z
2
u
1

v

y 2 x 3 z 2 u 1
y
2
x
3
z
2
u
1

v

Algorithmes d’arbre partiel de poids minimum

Algorithme de PRIM

L’algorithme de Kruskal veille à maintenir la propriété d’acyclicité d’un arbre alors que

l’algorithme de Prim se base sur la connexité d’un arbre. L’algorithme de Prim fait pousser un

arbre couvrant minimal en ajoutant au sous-arbre T déjà construit une nouvelle branche parmi les arêtes de poids minimal joignant un sommet de T à un sommet n’appartenant pas à ce dernier. L’algorithme s’arrête lorsque tous les sommets du graphe appartiennent à T.

(1)

choisir arbitrairement un sommet et marquer l’arête de poids minimum issue de ce sommet

(2)

soit A l’ensemble des sommets extrémités des arêtes marquées.

(3)

si A=X alors aller en 4 marquer l’arête de valeur minimum joignant un sommet de A et un sommet de X\A

(4)

et aller en (2) l’ensemble des arêtes marquées donne l’arbre partiel minimum

y y 2 x 5 5 6 3 4 z z 2 2 u 1
y
y
2
x
5
5
6
3
4
z z
2
2
u
1
1

v

u

minimum y y 2 x 5 5 6 3 4 z z 2 2 u 1

u

1
1

v

u

2 z 1
2
z
1

v

x

3 z 2 u 1
3
z
2
u
1

v

u

y 2 x 3 z 2 1
y
2
x
3
z
2
1

v

Problème des plus courts chemins dans les réseaux

Un réseau est un graphe orienté G = (V,E) muni d’une ou plusieurs

pondérations de ses arcs ou de ses sommets. Nous considérerons ici

des réseaux R = (V,E, c) où c est une pondération, à priori

quelconque, des arcs du graphe G = (V,E).

Les problèmes de plus courts chemins se divisent en trois grands

groupes :

• déterminer un plus court chemin d’un sommet origine (source) s à un sommet destination (puits) t ;

• déterminer les plus courts chemins d’un sommet source s à

tous les autres sommets du graphe ;

• déterminer les plus courts chemins entre toutes les paires (ordonnées) de sommets du graphe.

Plus courts chemins dans les réseaux

Remarques.

Dans les réseaux la longueur d’un chemin ou d’un circuit correspond à la somme des poids de ses arcs et non plus à leur nombre !

• Les problèmes de plus courts chemins ne sont bien définis que si le graphe ne contient pas de circuit à coût négatif (ou, du moins, ne possède pas de circuit à coût négatif atteignable depuis la source s). Dès à présent nous supposerons que cette hypothèse est toujours vérifiée.

Les problèmes de plus courts chemins peuvent être résolus

• à l’aide de la programmation dynamique ;

• à l’aide de la programmation linéaire (transbordement) ;

• à l’aide d’algorithmes spécialisés

Le principe d’optimalité de Bellman

Ce principe, également valable pour de nombreux problèmes de décisions, est à la base des techniques d’optimisation de la programmation dynamique ainsi que des algorithmes d’étiquettes.

Spécialisé

aux

problèmes

de

plus

courts

chemins,

ce

principe

énonce

simplement qu’un plus court chemin est formé de plus courts chemins.

plus court chemin est formé de plus courts chemins. Si C est un plus court chemin

Si C est un plus court chemin de s à t et si u appartient à ce plus court chemin, alors les sous-chemins de s à u et de u à t sont également des plus courts chemins.

Problème de chemin de valeur extremum dans un graphe valué

Soit G=(X,U) un graphe orienté sans boucle associé une valeur l ij

tel que à chaque arc (x i , x j ) soit

On se propose de chercher un chemin reliant un sommet x 1 à un sommet x n tel que sa longueur soit minimale ou maximale.

Posons : l ij = +

l ii = 0

si (x i , x j ) U

i

Algorithme de FORD

Hypothèse particulière : aucune Algorithme

On pose 1 = 0 et i = +

On cherche un arc (x i , x j ) tel que j - i > l ij et on remplace j par

i 1

j = i + l ij

On continue ainsi jusqu’à ce qu’aucun arc ne permette de diminuer les

j

Il existe nécessairement un sommet x p 1 tel que n - p 1 = l p 1 n

un sommet x p 2 tel que p 1 - p 2 = l p 2 p 1

et ainsi de suite jusqu’à ce que x p k = x 1

Le chemin (x 1 , xp k-1 , xp k-2 , ., xp 1 , xn) est optimal

Exemple : x2 x4 2 3 5 3 x1 5 7 x5 2 x3 
Exemple :
x2
x4
2
3
5
3
x1
5
7 x5
2
x3
 1 = 0 et  i = +
i  1

Arc (x 1 , x 2 )

2 - 1 > 3

2 =

3

Arc (x 1 , x 3 )

3 - 1 > 2

3 =

2

Arc (x 2 , x 4 )

4 - 2 > 2

4 =

5

Arc (x 4 , x 5 )

Arc (x 3 , x 5 )

5 - 4 > 5

5 - 3 > 7

5 = 10

’’ 5 = 9

Il n’est plus possible de diminuer les i

Algorithme de FORD

l

ij

x 1

x 2

x 3

x 4

x 5

x

1

 

0

3

2

 

x

2

0

5

2

x

3

0

3

7

x

4

0

5

x

5

∞ ∞

0

’’ 5 - 3 = l 35

3 - 1 = l 13

(x 1 , x 3 , x 5 ) est un chemin optimal de x 1 à x 5

4

3 - 1 = l 13

(x 1 , x 3 , x 4 ) est un chemin optimal de x 1 à x 4

3 = l 34

-

L’algorithme de Bellman-Kalaba

Hypothèse particulière : aucune Algorithme :

i (j) : la valeur du chemin optimal allant de x1 à xi et composé se j arcs au plus

L’algorithme consiste à calculer les quantités i (j) successivement pour i de 1 à n

1 (1) = 0

i (1) = l 1 i i

i (k) = min j (j (k-1) + l ji ) (principe d’optimalité)

• L’algorithme s’arrête quand i (k) = i (k-1) i

Remarque :

Si K=n, le graphe admet un cycle négatif

(cycle absorbant)

L’algorithme de Bellman-Kalaba

Exemple : x2 x4 2 3 5 3 x1 5 7 x5 2 x3
Exemple :
x2
x4
2
3
5
3
x1
5
7 x5
2
x3

Les chemins optimaux :

(x1, x2)

(x1, x3)

(x1, x2, x4)

(x1, x3, x5)

 i (3)  i (2)  i (1) l ij x 1 x 2
i (3)
i (2)
i (1)
l
ij
x 1
x 2
x 3
x 4
x 5
x
0
(1)
0
(1)
0
(1)
0
3
2
1
3
(1)
3
(1)
3
(1)
x
0
5
2
2
2
(1)
2
(1)
2 (1)
x
0
3
7
3
x
0
5
5
(2)
5
(2)
4
9
(3)
9
(3)
x
0
5
0 (1)
3 (1)
2 (1)
5 (2)
9 (3)

( )

Indice du sommet qui précède

L’algorithme de Dijkstra (1959) [Moore (1957)]

Hypothèse particulière : les l ij positives

Notations :

i (k) : la marque du sommet x i à l’étape k

: la marque définitive du sommet x i

i

M(k) : ensemble des sommets marqués définitivement à la fin de l’étape k

n k

: le numéro du sommet marqué définitivement à l’étape k

Algorithme

Etape 1 : i (1) = l 1 i i 1, 1 (1)=0, n1=1, M(1) ={1}

Etape K+1

i (k+1) = Min (i (k), nk + l n k i ) iM(k)

n (k+1) = Min i (k+1)

M(k+1) = M(k) {n k+1 }

A chaque étape on marque définitivement un sommet, c’est celui de plus petite marque parmi les sommets non encore marqués définitivement.

• L’algorithme s’arrête quand x n est marqué définitivement

L’algorithme de Dijkstra (1959) [Moore (1957)]

Exemple :

L’algorithme de Dijkstra (1959) [Moore (1957)]

Compléments

Pour reconstruire les plus courts chemins, on part de la destination et on remonte jusqu’à s. L’ensemble des arcs ainsi sélectionnés forme un arbre, l’arbre des plus courts chemins. En fait il s’agit d’une arborescence,

chemins . En fait il s’agit d’une arborescence , • L’algorithme de Dijkstra peut également être

• L’algorithme de Dijkstra peut également être appliqué à un graphe non orienté muni d’une pondération non négative de ses arêtes. Il suffit de remplacer successeurs par sommets adjacents dans l’algorithme ou, encore, de remplacer chaque arête par deux arcs de sens opposés. Le poids de ces arcs étant le même que celui de l’arête qu’ils remplacent.

Parcours de graphes

Parcours des arborescences en largeur

Le parcours en largeur (breadth-first search) d’une arborescence consiste à

visiter les noeuds dans l’ordre “de gauche à droite et de haut en bas”

Parcourir une arborescence en largeur:

enfiler la racine; TANT QUE la file n’est pas vide

soit n le premier noeud de la file;

{ traitement de n } défiler; enfiler tous les fils de n FIN TANT QUE

de n } défiler; enfiler tous les fils de n FIN TANT QUE Ordre de parcours

Ordre de parcours en largeur:

1, 2, 3, 4, 5, 6, 7

Parcours de graphes

Parcours des arborescences en profondeur Le parcours récursif en profondeur (depth-first seareh) d’une arborescence consiste à visiter la racine, la visite d’un noeud étant terminée lorsqu’on a visité tous ses fils:

parcourir une arborescence en profondeur:

visiter la racine

visiter un noeud n:

{ pré-traitement de n }

visiter tous les fils de n

{ posttraitement de n }

L’ordre de visite est “de haut en bas et de gauche à droite” (ordre préfixe). L’ordre de post-visite est “de bas en haut et de gauche à droite” (ordre postfixe).

Parcours de graphes

Parcours des arborescences en profondeur

On peut effectuer un parcours en profondeur non récursif en marquant les

sommets en cours de traitement, et en utilisant une pile pour garder la trace des

noeuds en attente:

une pile pour garder la trace des noeuds en attente: parcourir une arborescence en profondeur: empiler

parcourir une arborescence en profondeur:

empiler la racine; TANT QUE la pile n’est pas vide

soit s le sommet de pile;

SI s n’a pas été marqué ALORS { pré-traitement de s } marquer s; SI s a des fils ALORS empiler le fils aîné de s

FIN SI

SINON

 

{ posttraitement de s } dépiler; SI s a des frères plus jeunes ALORS empiler le frère cadet de s

FIN SI

FIN SI

Ordre de visite: 1, 2, 5, 6, 3, 4, 7;

de post-visite:

5, 6, 2, 3, 7, 4 , 1

FIN TANT QUE

Parcours de graphes

Les algorithmes de parcours des arborescences s’adaptent aux graphes, en considérant que l’on parcourt des arborescences associées aux sommets du

graphe; l’arborescence associée à un sommet est celle des descendants de

ce sommet que l’on n’a pas encore parcourus. Les arbres sous-jacents à ces arborescences forment une forêt recouvrante du graphe (contenant tous les

sommets du graphe)

Les ordres de parcours dépendent évidemment de l’ordre des sommets et de

l’ordre des successeurs de chaque sommet (ordres implicites dans la représentation du graphe en mémoire).

Parcours de graphes

Parcours en largeur

Parcourir un graphe en largeur:

Visiter tous les sommets

visiter un sommet s SI s n’a pas été marqué ALORS marquer et enfiler s; TANT QUE la file n’est pas vide soit n le premier sommet de la file; { traitement de n} défiler;

n le premier sommet de la file; { traitement de n} défiler; Ordre de parcours :

Ordre de parcours :

1, 2, 4, 5, 3

marquer et enfiler tous les successeurs non marqués de n

FIN TANT QUE FIN SI

Parcours en profondeur

Parcourir un graphe en largeur:

visiter tous les sommets

visiter un sommet s

SI s n’a pas été marqué ALORS { pré-traitement de s } marquer et empiler s; TANT QUE la pile n’est pas vide

Parcours de graphes

s; TANT QUE la pile n’est pas vide Parcours de graphes Ordre de visite : 1,

Ordre de visite : 1, 2, 4, 3, 5

Ordre de post-visite : 5, 3, 4, 2, 1

Soit x le sommet en tête de la pile

SI il existe un sommet y non marqué successeur de x ALORS { pré-traitement de y} marquer et empiler y;

SINON

FIN SI FIN TANT QUE FIN SI

{ posttraitement de x }

dépiler x;

Applications des parcours de graphes

Accessibilité Pour connaitre les sommets accessibles depuis un sommet donné d’un graphe (orienté

ou non), il suffit de faire un parcours en profondeur à partir de ce sommet,en marquant

les sommets visités.

Composantes connexes d’un graphe non orienté La composante connexe d’un sommet s est l’ensemble des sommets accessibles

depuis s. On peut colorier les composantes connexes en adaptant l’un des algorithmes

de parcours: par exemple (parcours en profondeur)

Graphe orienté sans circuit Un graphe orienté comporte un circuit si et seulement si lors du parcours des sommets

accessibles depuis un sommet, on retombe sur ce sommet. Pour savoir si un graphe

est sans circuit, il suffit donc d’adapter l’un des algorithmes de parcours, en maintenant une liste des sommets critiques (en cours de visite).

Tri topologique d’un graphe orienté sans circuit

Le tri topologique d’un graphe orienté sans circuit est une numérotation des sommets

dans laquelle les descendants d’un sommet de numéro k sont nécessairement de numéro supérieur à k.