Vous êtes sur la page 1sur 57

Structures récursives non linéaires :

structures de données abstraites


Structures de données et
algorithmes généraux de la théorie
des graphes

Faten LABBENE AYACHI

Les Graphes - F. LABBENE AYACHI 1


Définitions
et
structures de données
des graphes

Les Graphes - F. LABBENE AYACHI 2


Définitions
Une structure de données non linéaire
Est un ensemble d’éléments distribués sur un plan, ce qui signifie
qu’il n’y a pas de séquence entre les éléments telle qu’elle existe
dans une structure de données linéaire.
Exemples : Arbre, graphe.

Type abstrait
Un type abstrait est un triplet composé de :
• un nom
• un ensemble de valeurs
• un ensemble d'opérations (souvent appelé primitives) définies
sur ces valeurs.
Exemples : Pile, File, arbre, graphe, conteneur.
Les Graphes - F. LABBENE AYACHI 3
Tout sur les ARBRES
• Une structure de modèle hiérarchique.
• Un arbre est une structure acyclique, connectée et dirigée.
• Il doit y avoir un nœud racine dans l’arbre à partir duquel on peut atteindre
tous les autres nœuds de l’arbre.
• Il existe toujours un seul chemin pour atteindre à partir du nœud racine un
autre nœud de l’arbre.
• Parcourir un arbre : à partir d’un nœud retrouver chaque nœud du sous-
arbre.
• Parcours préordre, postordre et ordre sont une sorte de parcours dans les
arbres. On les appelles aussi parcours préfixé, postfixé et infixé.
• Les arbres sont principalement utilisés pour trier et parcourir.
• La structure arbre est moins complexe que celle de graphe.

Les Graphes - F. LABBENE AYACHI 4


Tous les ARBRES sont des GRAPHES
• Une structure de modèle hiérarchique. • Structure de modèle réseau.
• Un arbre est une structure acyclique, • Peuvent êtres cycliques, non connexes, non
connectée et dirigée.
orientés.
• Il doit y avoir un nœud racine dans • Pas de nœud racine dans les graphes.
l’arbre à partir duquel on peut atteindre
tous les autres nœuds de l’arbre.

• Il existe toujours un seul chemin pour • À partir d’un nœud A il existe plusieurs
atteindre à partir du nœud racine un autre
nœud de l’arbre.
chemins pour atteindre un nœud B.
• Parcourir un arbre : à partir d’un nœud • Recherche dans un graphe : à partir d’un
retrouver chaque nœud du sous-arbre.
nœud essayer de trouver un nœud particulier.
• Parcours préordre, postordre et ordre • Parcours en largeur ou en profondeur sont
sont une sorte de parcours dans les
arbres.
des algorithmes de recherche.
• Les arbres sont principalement utilisés • La principale utilisation des graphes est la
pour trier et parcourir.
coloration et la planification des tâches.
• La structure arbre est moins complexe • Complexité élevée par rapport aux arbres
que celle de graphe.
Les Graphes - F.principalement
LABBENE AYACHIà cause des boucles. 5
Définitions
• Un graphe est un couple G = (S, A) dans lequel :
‾ S est l'ensemble des éléments mis en relation les uns avec les autres.
Les éléments de S sont nommés sommets.
‾ A représente les relations établies entre membres de S. A est donc un
ensemble de couples d'éléments de S.

• On parle de graphe non orienté dans le cas d'une relation symétrique


entre les sommets, on parle de 2 sommets mis en relation, sans préciser
d'ordre entre ces deux sommets. Les éléments de A sont nommés arêtes.

• Dans le cas d'une relation non symétrique, il y a une direction particulière


dans la mise en relation de deux sommets. On parle alors de graphe
orienté, et les éléments de A sont nommés arcs.

6
Les Graphes - F. LABBENE AYACHI
Graphe non orienté vs graphe orienté
A E
S = {A, E, B, C, F, D, K}
D A = { {A,B}, {A,E}, {E,C},
B C {E,B}, {C,B}, {C,F}, {B,F},
K {F,E}, {D, K}}

A E
S = {A, E, B, C, F}
A = {(A,A), (A,B), (A,E),
B C (E,C), (C,B), (C,F), (B,F),
(B,E), (B,A), (F,E)}
7
Les Graphes - F. LABBENE AYACHI
F
Exemples de problèmes modélisés par des graphes valués et
étiquetés

A 142 E
Tunis Sousse
58 136
250 C
B Sfax
Bizerte
139
F
Gabes

• Un graphe de réseau routier tunisien utilisera des valeurs


représentant les distances kilométriques des trajets.
• Un graphe de coloriage n'a pas besoin de valuation.
Les Graphes - F. LABBENE AYACHI 8
Exemples d’applications des graphes
• Représentation et manipulation de Plan métro, bus, réseau
routier, coloriage carte géographique, Châteaux d’eau et
distribution.
• Représentation et manipulation des réseaux d’amis sur
Facebook, réseaux de professionnels tels que linkedIn,
ResearchGate, Arbre généalogique, etc.
• Circuit imprimé, Réseaux informatique, réseaux télécoms.
• Héritage des types dans les langages OO.
▪ Les appels faits par une collection de procédures
(récursivité/récursivité croisée).
• Planification des tâches, gestion des emplois du temps, etc.

Les Graphes - F. LABBENE AYACHI 9


Sommet, arête, voisin, degré

Sommets : A, B, C, D
Arêtes : AB, BC, AC, BD
voisins(A) : B et C
voisins(B) : A, C et D
voisins(C) : A et B
voisins(D) : B
A et D ne sont pas voisins.
D et C ne sont pas voisins

degré(A) = degré(C) =2
degré(B) = 3
degré(D) =1
Les Graphes - F. LABBENE AYACHI 10
Chemin, longueur
Chemin : Suite d’arêtes permettant de relier deux sommets.
(ABC) est un chemin reliant A à D.
Longueur d’un chemin = nombre de ses arêtes
Longueur (ABC) = 2
Tout sommet isolé a une longueur 0.
Remarque :
Il existe deux chemins entre A et C soit
ABC et AC.
Le plus court chemin étant AC.

➔L'existence d'un chemin


d'un sommet à un autre peut être
testée à l'aide d'un parcours de graphe.
Les Graphes - F. LABBENE AYACHI 11
Chemin vs Cycle

• Chemin élémentaire : Chemin qui ne contient pas plusieurs


fois le même sommet. Il est hamiltonien s’il passe par tous les
sommets du graphe.

• Chemin simple est un chemin ne passant pas plusieurs fois


par une même arête, c'est-à-dire dont tous les arcs sont
distincts. Il est eulérien s’il contient toutes les arêtes du
graphe.

• Un cycle est un chemin dont les deux extrémités sont


identiques. Il est par définition non élémentaire.

Les Graphes - F. LABBENE AYACHI 12


Chemin vs cycle

• Le chemin en vert n'est pas


fermée et ne forme donc pas
un cycle.

• Les deux cycles rouge et


bleu sont simples mais non
élémentaires de longueur
respectivement 3 et 6.

Les Graphes - F. LABBENE AYACHI 13


Graphe complet / Graphe connexe

complet

G est complet si Un graphe est connexe s’il existe un


pour tout couple de chemin reliant chaque paire de
sommets de G, il sommets.
existe une arête.

Les Graphes - F. LABBENE AYACHI 14


Sous-graphe
• Un sous-graphe G’=(S’, A’) d’un graphe G est un graphe tel que:
₋ S’ est un sous-ensemble des sommets de G.
₋ A’ un sous-ensemble des arêtes de G.

• Un sous-graphe est dit couvrant s’il contient tous les sommets de


G.

Les Graphes - F. LABBENE AYACHI 15


Arbre couvrant minimal
Un arbre couvrant d’un graphe est un sous-graphe couvrant qui est
un arbre.
Arbre couvrant minimal d’un graphe pondéré est un arbre
couvrant dont le poids total des arêtes est minimal.
Une forêt est un graphe non orienté ne contenant pas de cycles. Les
composantes connexes d’une forêt sont donc des arbres.

Exemples :
• Pour la construction d’un réseau électrique entre habitations,
l'arbre couvrant minimum est la façon de construire un tel réseau
en minimisant par exemple la longueur totale de câble.
• Minimisation de la communication entre tous les nœuds dans un
réseau de capteurs sans fils se fait autour d’un nœud appelé
racine. Les Graphes - F. LABBENE AYACHI 16
Définitions
• Un graphe étiqueté est un couple G=(S,A) sur lequel une fonction
d’étiquetage est définie, qui associe une étiquette à chaque élément de S.
Plusieurs sommets peuvent avoir la même étiquette.

• Chaque sommet doit avoir un identifiant unique.

• Un graphe valué ou pondéré est un couple G=(S,A) sur lequel une


fonction de valuation est définie, qui associe une valeur à chaque élément
de A. Plusieurs arêtes peuvent avoir la même valeur.

• Le poids d'un chemin est la somme des poids des arêtes qui le
composent.
• Un plus court chemin entre deux sommets est, parmi les chemins qui les
relient, le chemin de poids minimum.

17
Les Graphes - F. LABBENE AYACHI
Graphe orienté
Exemple type d’applications : ordre topologique ou
ordonnancement des tâches

Hypothèse 1 :
• On dispose d’une seule ressource.
• Toutes les tâches doivent être exécutées
➔ Exécuter les tâches les unes après les autres.

Hypothèse 2 : Il existe des contraintes sur l’ordre d’exécution des


tâches.
Y ne peut commencer à
être exécuté tant que X
X Y n’est pas terminé.
Les Graphes - F. LABBENE AYACHI 18
Structures de données
des graphes non orientés

Les Graphes - F. LABBENE AYACHI 19


Représentation statique d’un graphe
Matrice d’adjacence

A A E
0 1 1 1 0
B 1 0 1 0 1
B C
C 1 1 0 1 1
E 1 0 1 0 1 F

F 0 1 1 1 0 M est symétrique
par rapport à sa
Liste Voisinage entre sommets première
des sommets diagonale.
Les Graphes - F. LABBENE AYACHI 20
Représentation statique d’un graphe
Matrice d’adjacence
A si (L[i], L[j]) ϵ A
0 1 1 1 0 alors M[i,j] = vrai
M[j,i] = vrai
B 1 0 1 0 1 sinon M[i,j] = faux
M[j,i] = faux
C 1 1 0 1 1
Voisins(L[i])
E 1 0 1 0 1 =
{ L[j] / M[i,j]=1 }
F 0 1 1 0 0
Liste Matrice Voisinage entre sommets
des sommets
Les Graphes - F. LABBENE AYACHI 21
MATRICE D’ADJACENCE
d’un graphe étiqueté
id ville
A Tunis -1 142 58 250 -1
B Bizerte 58 -1 -1 -1 -1
C Sfax 250 136 -1 -1 139
E Sousse 142 -1 -1 136 -1
F Gabes -1 -1 -1 139 -1

si (L[i].id, L[j].id) ϵ A
alors M[i,j] = poids((L[i], L[j])
sinon M[i,j] = -1
Les Graphes - F. LABBENE AYACHI 22
Représentation dynamique d’un graphe :
Les LISTES D’ADJACENCE
Liste ordonnée des sommets Liste des voisins
• •
G A
1 • 2 • 3
B • • 4
Exemple de
C • • 1 • 2 • 5
graphe non
3 • 5 étiqueté et
D • •
non pondéré
2
E •

▪ Les listes d’adjacence sont triées par le numéro des sommets.


▪ Les voisins d’un sommet peuvent apparaitre dans n’importe
quel ordre.
Les Graphes - F. LABBENE AYACHI 23
Structure de données Graphe non orienté
Etant donné un graphe étiqueté et pondéré, donnez les définitions
sous-jacentes suivantes :
1) Définition d’une matrice d’adjacence.
2) Définition d’une liste d’adjacence.

A 142 E
Tunis Sousse
58 136
250 C
B Sfax
Bizerte
139
F
Gabes
Les Graphes - F. LABBENE AYACHI 24
Structures de données
des graphes orientés

Les Graphes - F. LABBENE AYACHI 25


Représentation statique d’un graphe orienté

A 1 1 0 1 0
A E
B 1 0 0 1 1
C 0 1 0 0 1 B C
E 0 0 1 0 0
F
F 0 0 0 1 0

Les Graphes - F. LABBENE AYACHI 26


Représentation statique d’un graphe orienté
A matrice d’adjacence
A 1 1 0 1 0
si (L[i], L[j]) ϵ A
B 1 0 0 1 1 alors M[i,j] = vrai
sinon M[i,j] = faux
C 0 1 0 0 1
• Ligne ➔ sommet de départ
E • Colonne ➔ sommet
0 0 1 0 0 d'arrivé

F 0 0 0 1 0

Liste Matrice d’adjacence entre sommets


des sommets
Les Graphes - F. LABBENE AYACHI 27
Représentation statique d’un graphe orienté
Matrice d’incidence du graphe
AA AB BA AE BE BF CB CF EC FE
Liste des
Liste des 1 2 3 4 5 6 7 8 9 10 arêtes
sommets
A +1 +1 -1 +1 0 0 0 0 0 0
B 0 -1 +1 0 +1 +1 -1 0 0 0
C 0 0 0 0 0 0 +1 +1 -1 0
E 0 0 0 -1 -1 0 0 0 +1 -1
F 0 0 0 0 0 -1 0 -1 0 +1

La représentation {-1, 0, +1} ne convient pas lorsque le


graphe contient des boucles ➔ Introduire une autre valeur
{-1, 0, +1, +2} Les Graphes - F. LABBENE AYACHI 28
Représentation statique d’un graphe orienté
Matrice d’incidence du graphe

1 2 3 4 5 6 7 8 9 10

Sommet isolé 0 0 0 0 0 0 0 0 0 0

Point d’entrée 0 +1 +1 0 +1 +1 +1 0 0 0
Point de sortie 0 0 0 0 0 0 -1 -1 -1 0
0 -1 -1 0 -1 0 0 +1 +1 0

Prédécesseurs Successeurs
= nombre des -1 = nombre des +1

Les Graphes - F. LABBENE AYACHI 29


Représentation dynamique d’un graphe :
Les LISTES D’INCIDENCE

Liste ordonnée des sommets Liste des sommets incidents


• •
G A
A • E • B
B • • A • E • F

C • • B • F

C
E • •

E
F •

• Chaque case sommet pointe sur la liste des sommets incidents.


• La liste est vide si le sommet est isolé.
Les Graphes - F. LABBENE AYACHI 30
Exercice d’application

Les Graphes - F. LABBENE AYACHI 31


Application Gestion des acteurs 1/3
Une société de production cinématographique désire informatiser son système de gestion.
Ainsi, on vous a confié la conception du module « Gestion des acteurs ». Pour ce faire, on
dispose d’un ensemble de N acteurs. Chaque acteur est caractérisé par les informations
suivantes :
– numéro d’identification (entier)
– nom (chaîne de 30 caractères)
– adresse (chaîne de 50 caractères)
– sexe (1 caractère : M : masculin, F : féminin)
– nationalité (chaîne de 30 caractères)
De plus, pour chaque acteur, on connaît ses partenaires (les acteurs ayant joué avec lui) et
le nombre de films auxquels il avait participé avec chacun d’eux.
Exemple :
Soit l’ensemble d’acteurs : {A1,A2,A3,A4, A5}.
On sait que:
– A1 a joué avec A3 dans 2 films et avec A4 dans 1 film.
– A2 a joué avec A3 dans 1 film, avec A4 dans 4 films et avec A5 dans 2 films
– A4 et A5 ont jouésLesensemble
Graphes - F.dans 4 films.
LABBENE AYACHI 32
Application Gestion des acteurs 2/3
1) Quelle structure abstraite utilisera-t-on pour modéliser ce
problème ?
2) Représenter cette structure abstraite en utilisant :
a) Une structure de données statique R1
b) Une structure de données dynamique R2.

3) En utilisant la structure de données R1, écrire une procédure qui


affiche les noms des actrices ayant jouées avec un acteur de
numéro d’identification donné.
4) En utilisant la structure de données R1, écrire une fonction qui
calcule le nombre de films joués par un acteur de numéro
d’identification donné.
Les Graphes - F. LABBENE AYACHI 33
Application Gestion des acteurs 3/3
5) En utilisant la structure de données R2, écrire une procédure qui
retourne dans une structure de votre choix l’ensemble de tous les
acteurs (avec les informations qui les caractérisent) et pour
chaque acteur uniquement les partenaires portant la même
nationalité que lui.

6) En utilisant la structure de données R2, une procédure qui


affiche les noms des acteurs qui ont joué à la fois avec deux
acteurs de numéros donnés.

Pour l’exemple précédent et si les acteurs donnés sont A1 et A2, la


procédure affichera A3 et A4.

Les Graphes - F. LABBENE AYACHI 34


Primitives de manipulation d’un graphe

1) Initialiser un graphe à vide.


2) Ajouter un sommet à un graphe (indiquer le numéro ou nom et
le contenu du sommet).
3) Ajouter une arête à un graphe (indiquer les deux sommets qu’il
relie).
4) Ôter un sommet du graphe et tous les arcs qui y sont rattachés.
5) Ôter une arête.
6) Permettre l’accès à un sommet, étant donné son numéro ou son
nom.
7) Parcourir les voisins d’un sommet.
8) Indiquer si un sommet n’a pas de voisins.

Les Graphes - F. LABBENE AYACHI 35


Algorithmes de parcours des
graphes non orientés

Les Graphes - F. LABBENE AYACHI 36


Parcours en largeur d’un graphe
Breadh First Search
Lorsque l'on fait un parcours en largeur à partir d'un sommet
choisi s, on atteint d'abord les voisins de u, ensuite les voisins des
voisins (sauf ceux qui sont déjà atteints) et ainsi de suite.

A E
BFS(G, A) ?

B C

BFS(G, F) ?
F
Les Graphes - F. LABBENE AYACHI 37
Démo BFS
BFS(G, A) BFS(G, F)
➔ A B E C F ➔ F B C A E
A E A E

B C B C

F F
Arbres différents mais mêmes propriétés.
Les Graphes - F. LABBENE AYACHI 38
Parcours en profondeur d’un graphe
Principe :
Dans le parcours en profondeur à partir d'un sommet u, on tente
d'avancer le plus loin possible dans le graphe, et ce n'est que lorsque
toutes les possibilités de progression sont bloquées que l'on revient
pour explorer un nouveau chemin.

Les Graphes - F. LABBENE AYACHI 39


Démo DFS
DFS(G, A) DFS(G, F)
➔ A B E C F ➔ F B C A E
A E A E

B C B C

F F
Arbres différents mais mêmes propriétés.
Les Graphes - F. LABBENE AYACHI 40
DFS vs BFS
DFS(G, A) BFS(G, A)
➔ A B E C F ➔ A B E C F
A E A E

B C B C

F F
Arbres différents mais mêmes propriétés.
Les Graphes - F. LABBENE AYACHI 41
DFS vs BFS
DFS(G, F) BFS(G, F)
➔ F B C A E ➔ F B C A E
A E A E

B C B C

F F
Arbres différents mais mêmes propriétés.
Les Graphes - F. LABBENE AYACHI 42
DFS vs BFS

A A A

B C D B C D B C D

E F E F E F

Les Graphes - F. LABBENE AYACHI 43


Parcours d’un graphe
Deux types de parcours : EN LARGEUR ou EN PROFONDEUR
(Breadth First Search vc Deapth First Search)
Ces parcours généralisent les parcours similaires dans les arbres.
Afin de prévoir le cas des cycles, il faut colorier les sommets déjà
parcourus :
- Initialement les sommets sont tous blancs ;
- lorsqu’il est rencontré pour la première fois un sommet est peint
en gris ;
- lorsque tous ses successeurs dans l’ordre de parcours ont été
visités, un sommet est repeint en noir.

Les Graphes - F. LABBENE AYACHI 44


algorithme DFS (g: graphe)
début
| … Algorithme
| pour chaque sommet u de g faire
| | couleur [u] ← blanc Deph First
|
|
pour chaque sommet u de g faire
| si couleur[u]= blanc
Search
| | alors DFS_visit_REC(g, u)
Fin

algorithme DFS_visit_REC (g: graphe, u: sommet)


début
| couleur [u] ← gris
| pour chaque voisin v de u faire
| | si (couleur (v) = blanc)
| | | alors DFS_visit_REC(g, v)
| couleur (s) ← noir
fin DFS_visit

Les Graphes - F. LABBENE AYACHI 45


Trace d’exécution DFS
couleur
A n
A A
B n
B C D
A C E C n
B C D A D E F
D n
A C F
C D E n

F n
E F
K b
K L b
L

Les Graphes - F. LABBENE AYACHI 46


algorithme DFS (g: graphe)
début
| … Algorithme
| pour chaque sommet u de g faire
| | couleur [u] ← blanc Deph First
|
|
pour chaque sommet u de g faire
| si couleur[u]= blanc
Search
| | alors DFS_visit_REC(g, u)
Fin Si le graphe
n’est pas
algorithme DFS_visit_REC (g: graphe, u: sommet)
début
connexe, il faut
| couleur [u] ← gris plusieurs
| pour chaque voisin v de u faire parcours.
| | si (couleur (v) = blanc)
| | | alors DFS_visit_REC(g, v)
| couleur (s) ← noir
fin DFS_visit

Les Graphes - F. LABBENE AYACHI 47


algorithme DFS_visit_REC (g: graphe, u: sommet)
DFS
début pour calculer
| couleur [u] ← gris d’autres
| C C+1 informations
| pour chaque voisin v de u faire
| | si (couleur (v) = blanc)
| | alors pere[v]  w
dist[u] : entier
| | dist[v]  c
| | DFS_visit_REC(g, v) Distance entre un
| couleur (s) ← noir nœud et le sommet u.
fin DFS_visit pere[s] : sommet
pour construire
l’arbre couvrant

Les Graphes - F. LABBENE AYACHI 48


algorithme DFS (g: graphe)
début
| C 0
| pour chaque sommet u de g faire pere [u] ← nil DFS
| pour chaque sommet u de g faire dist [u] ← -1 initialisations
| pour chaque sommet u de g faire couleur [u] ← blanc
| pour chaque sommet u de g faire
| | si couleur[u]= blanc
| | alors DFS_visit_REC(g, u)
Fin
algorithme DFS_visit_REC (g: graphe, u: sommet)
début
| couleur [u] ← gris
| C C+1
| pour chaque voisin v de u faire
| | si (couleur (v) = blanc)
| | alors pere[v]  w
| | dist[v]  c
| | DFS_visit_REC(g, v)
| couleur (s) ← noir
Les Graphes - F. LABBENE AYACHI 49
fin DFS_visit
Initialisations Algorithme Depth First Search
• Pour tout u, couleur[u] = blanc ou couleur [getpos(G,u)]
couleur[u] : {blanc, gris, noir}
Marque les sommets non visités, encours ou terminés.
• Pour tout u, dist[u] = -1 et pere[u] = nil
• C=0

-1 nil blanc A • • B • C • E

-1 nil blanc B • • A • C • F

-1 nil blanc C • • A • B • E • F
-1 nil Blanc A • C • F
E • •

-1 nil blanc B • C • E
F •

Les Graphes - F. LABBENE AYACHI 50


Initialisations Algorithme Dept First Search
• Pour tout u, couleur[u] = blanc ou couleur [getpos(G,u)]
couleur[u] : {blanc, gris, noir}
Marque les sommets non visités, encours ou terminés.
• Pour tout u, dist[u] = -1 et pere[u] = nil
• C=0
-1 nil blanc A 0 1 1 1 0

-1 nil blanc B 1 0 1 0 1

-1 nil blanc C 1 1 0 1 1

-1 nil Blanc E 1 0 1 0 1

-1 nil blanc F 0 1 1 0 0

Les Graphes - F. LABBENE AYACHI 51


Algorithme itératif Depth First Search
algorithme DFS_visit_ITER (g: graphe, u: sommet)
début
| couleur [u] ← gris
Pour la version
| initpile(f)
itérative on utilise
| enpiler (f, u)
| tant que (non pilevide (f) ) faire une pile
| | w ← dépiler (f)
| | pour chaque voisin v de w faire
| | | si (couleur (v) = blanc)
| | | | alors couleur [v] ← gris
| | | enpiler (f, v)
| | couleur [w] ← noir
fin DFS_visit_ITER
Les Graphes - F. LABBENE AYACHI 52
algorithme DFS_visit_ITER (g: graphe, u: sommet)
début
| couleur [u] ← gris
| initpile(f)
| enpiler (f, u)
| tant que (non pilevide (f) ) faire
| | w ← défiler (f)
| | c ← c+1
| | pour chaque voisin v de w faire
| | | si (couleur (v) = blanc)
| | | | alors couleur [v] ← gris
| | | | | pere[v] ← w
| | | | | dist[v] ← c
| | | enpiler (f, v)
| | couleur [w] ← noir
fin DFS_visit_ITER 53
Les Graphes - F. LABBENE AYACHI
Algorithme itératif Breadh First Search
algorithme BFS_visit_ITER (g: graphe, u: sommet)
début
| couleur [u] ← gris
| initfile(f) Pour la version
| enfiler (f, u) itérative on utilise
| tant que (non filevide (f) ) faire une file d’attente
| | w ← défiler (f)
| | pour chaque voisin v de w faire
| | | si (couleur (v) = blanc)
| | | | alors couleur [v] ← gris
| | | enfiler (f, v)
| | couleur [w] ← noir
fin BFS_visit_ITER
Les Graphes - F. LABBENE AYACHI 54
algorithme BFS_visit_ITER (g: graphe, u: sommet)
début
| couleur [u] ← gris
| initfile(f)
| enfiler (f, u)
| tant que (non filevide (f) ) faire
| | w ← défiler (f)
| | c ← c+1
| | pour chaque voisin v de w faire
| | | si (couleur (v) = blanc)
| | | | alors couleur [v] ← gris
| | | | | pere[v] ← w
| | | | | dist[v] ← c
| | | enfiler (f, v)
| | couleur [w] ← noir
fin BFS_visit_ITER
Les Graphes - F. LABBENE AYACHI 55
BFS vs DFS
Étapes de l'algorithme itératif BFS :
1. Mettre le nœud source dans la file.
2. Retirer le nœud du début de la file pour le traiter.
3. Mettre tous les voisins non explorés dans la file (à
la fin).
4. Si la file n'est pas vide reprendre à l'étape 2.
Note :
• L'utilisation d'une pile au lieu d'une file transforme
l'algorithme du parcours en largeur en l'algorithme de
parcours en profondeur.
• Pas de version récursive de BFS.
Les Graphes - F. LABBENE AYACHI 56
Parcours en largeur d’un graphe
Breadh First Search
• Visite tous les sommets et toutes les arêtes de G.
• Calculer les distances de tous les nœuds depuis un nœud
source.
• Construire un arbre couvrant.
• Détermine si G est connexe ou non.
• Calcule les composantes connexes de G.
• Calcule une forêt couvrante pour G.

Les Graphes - F. LABBENE AYACHI 57

Vous aimerez peut-être aussi