60
Structures de données IFT-2000 Abder Alikacem Abder Alikacem Les graphes (2) Semaine 6 Département d’informatique et de génie logiciel Édition Septembre 2009

Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Embed Size (px)

Citation preview

Page 1: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Structures de donnéesIFT-2000

Abder AlikacemAbder Alikacem

Les graphes (2)

Semaine 6

Département d’informatique et de génie logiciel

Édition Septembre 2009

Page 2: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Plan

• Parcours d’un graphe par contagion (ou largeur)• Parcours d’un graphe par sondage (ou profondeur)• Description d’un graphe en terme de type abstrait• Implantation

4

2

5

3

1

Page 3: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Défilement d’un graphe

• opération importante visite d’un graphe• problème : éviter les circuits !!!• solution : marquer les nœuds (Petit-Poucet)

4

2

5

3

1

Page 4: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Défilement d’un graphe

• opération importante visite d’un graphe• problème : éviter les circuits !!!• solution : marquer les nœuds (Petit-Poucet)

4

2

5

3

1

x

Page 5: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Défilement d’un graphe

• opération importante visite d’un graphe• problème : éviter les circuits !!!• solution : marquer les nœuds (Petit-Poucet)

4

2

5

3

1

x xx

Page 6: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Marquer les nœuds (Petit-Poucet)

De nombreux algorithmes relatifs aux graphes nécessitent une procédure qui permet l'examen systématique des noeuds et des arêtes (arcs) d'un graphe G donné.

La procédure consiste à classer les sommets en 3 catégories:• La catégorie A des sommets déjà visités.• La catégorie B des sommets adjacents à ceux de la catégorie

A mais pas encore visités (sommets qui peuvent être atteints).• La catégorie C des sommets invisibles qui n'ont pas encore

été rencontrés du tout (qui ne peuvent pas être atteints depuis un sommet déjà visité).

Page 7: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Les différentes variantes de parcours dépendront de la manière dont on fait passer les sommets de la catégorie C à la catégorie B et de la B dans la A. On construit l'état initial en plaçant le sommet de départ dans la catégorie B et tous les autres dans la catégorie C. On répète alors :

faire passer un sommet x de la catégorie B à la catégorie A;

mettre dans la catégorie B tous les sommets de catégorie C

adjacents à x.

Marquer les nœuds (Petit-Poucet)

Page 8: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Au cours de l'exécution de nos algorithmes, chaque noeud N de G sera dans l'un des trois états suivants :

STATUS = 1  : (Prêt) État initial du noeud N

STATUS = 2  : (Attente) Le noeud N est soit empilé, soit dans la file d'attente, en attente d'être traité.

STATUS = 3  : (Traité) Le noeud N a été traité.

Marquer les nœuds (Petit-Poucet)

Noter qu’au lieu de marquer les nœuds par 1, 2 ou 3, peut simplement le faireEn utilisant un booléen:

•vrai : le nœud est soit traité soit en attente d’être traité (status =1 ou 2)•Faux: le nœud n’a pas été parcouru (status = 1)

Page 9: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Il existe deux manières standard d'exécuter ces opérations:

Parcours par contagion ou par largeur Parcours par sondage ou en profondeur

Défilement d’un graphe

Page 10: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Défilement d’un graphe

L'algorithme de recherche par sondage ou en profondeur (Depth-First Search ou DFS) permet:

• d'explorer un graphe,• d'en déterminer les composantes connexes,• de découvrir s'il contient des cycles.

Cet algorithme de parcours dans un graphe a été mis au point par Trémaux au siècle dernier pour résoudre le problème de la sortie d'un labyrinthe. Trémaux qui n'avait pas la possibilité d’utiliser la récursivité à l'époque utilisait un ''fil d'Ariane'' lui permettant de se souvenir par où il était arrivé à cet endroit dans le labyrinthe.

L'algorithme utilise une pile pour le parcours du graphe à partir d'un sommet donné. On progresse le long d'un de ces arcs et, si l’on ne trouve pas ce que l’on cherche, on progressera alors le long d'un autre de ces arcs.

Page 11: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

L’algorithme de recherche par contagion ou en largeur (Breadth-First Search ou BFS) est à la base de la résolution de problèmes tels que celui du chemin minimum.

Le principe: si l'on suppose que tout un groupe de personnes

entreprennent l'exploration d’une ville, à chaque carrefour, le groupe pourra se partager pour aller dans toutes les directions à la fois.

L'algorithme utilise une file pour le parcours du graphe à partir d'un sommet donné.

Défilement d’un graphe

Page 12: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

A

BCF

D

J K

GE

Exemple au tableau

Défilement d’un graphe

Page 13: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Parcours en largeur

1. Initialiser (mettre à « faux ») une marque (une valeur booléenne) associée à chaque nœud.

2. Enfiler et marquer (mettre sa marque à « vrai ») le nœud de départ.3. Tant et aussi longtemps que la file n’est pas vide:

a) Défiler le prochain nœud.b) Pour chaque voisin qui n’est pas marqué:

i. Le marquerii. L’enfiler.

Remarque: S’il s’agit d’un parcours fait pour retrouver un chemincomportant le plus petit nombre d’étapes entre deux nœuds donnés, alorson peut s’arrêter dès qu’on atteint le nœud d’arrivée. Aussi, si on veut ladescription de ce chemin, il faut mémoriser le meilleur précédent pourchaque nœud, un peu de la même façon que la modification qui a été faite àl’algorithme de Floyd pour les chemins (sauf que ce ne sera plus dans unematrice mais dans un tableau à une dimension).

Page 14: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Parcours en largeur

AF

G

DB

C

E

A

Nœud de départ

File

✓ ()

()

()()

()

()

()

Page 15: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Parcours en largeur

AF

G

DB

C

ENœud de départ

File

✓ ()

()

()()

()

()

()

Défilé: A

Page 16: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Parcours en largeur

AF

G

DB

C

E

G ; B ; F

Nœud de départ

File

()

(A)

(A)()

()

()

(A)

Défilé: A

Page 17: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Parcours en largeur

AF

G

DB

C

E

B ; F

Nœud de départ

File

()

(A)

(A)()

()

()

(A)

Défilé: G

Page 18: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Parcours en largeur

AF

G

DB

C

E

F

Nœud de départ

File

()

(A)

(A)()

()

()

(A)

Défilé: B

Page 19: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Parcours en largeur

AF

G

DB

C

E

F ; C ; D

Nœud de départ

File

()

(A)

(A)()

(B)

(B)

(A)

Défilé: B

Page 20: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Parcours en largeur

AF

G

DB

C

E

C ; D

Nœud de départ

File

()

(A)

(A)()

(B)

(B)

(A)

Défilé: F

Page 21: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Parcours en largeur

AF

G

DB

C

E

D

Nœud de départ

File

()

(A)

(A)()

(B)

(B)

(A)

Défilé: C

Page 22: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Parcours en largeur

AF

G

DB

C

ENœud de départ

File

()

(A)

(A)()

(B)

(B)

(A)

Défilé: D

Page 23: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Parcours en largeur

AF

G

DB

C

ENœud de départ

File

()

(A)

(A)()

(B)

(B)

(A)

Meilleur chemin entre A et D:

D

Page 24: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Parcours en largeur

AF

G

DB

C

ENœud de départ

File

()

(A)

(A)()

(B)

(B)

(A)

Meilleur chemin entre A et D:

D

Page 25: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Parcours en largeur

AF

G

DB

C

ENœud de départ

File

()

(A)

(A)()

(B)

(B)

(A)

Meilleur chemin entre A et D:

B D

Page 26: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Parcours en largeur

AF

G

DB

C

ENœud de départ

File

()

(A)

(A)()

(B)

(B)

(A)

Meilleur chemin entre A et D:

B D

Page 27: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Parcours en largeur

AF

G

DB

C

ENœud de départ

File

()

(A)

(A)()

(B)

(B)

(A)

Meilleur chemin entre A et D:

A B D

Page 28: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Parcours par contagion

Questions • Est-ce que tout graphe peut être parcouru

par cet algorithme ?

4

2

5

3

1

4

2

5

3

1

• Comment modifier l’algorithme pour que tout graphe soit parcouru ?

• Comment est-ce que l’algorithme s’arrêtera ?

• Pourquoi est-ce que ça marche bien pour trouver le chemin le plus court ?

• Quelle est la complexité de l’algorithme de parcours par largeur?L’algorithme prend un temps O(n+m)

Page 29: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Algorithme parcours en profondeur

1. Initialiser (mettre à « faux ») une marque (une valeur booléenne) associée à chaque sommet pour dire qu’il n’a pas été parcouru.

2. Empiler et marquer le nœud de départ.3. Tant et aussi longtemps que la pile n’est pas vide:

a) Dépiler un nœud, et lui faire le traitement voulu pour le parcours (par exemple, afficher sa valeur à l’écran).

b) Pour chacun de ses voisins qui n’est pas marqué:i. Le marquer.ii. L’empiler.

Remarque: Ce parcours n’est pas approprié pour retrouver le

chemin le plus court entre deux nœuds donnés. Il est cependant

très facile à implanter par une fonction récursive.

Page 30: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Algorithme parcours en profondeur

Page 31: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Algorithme parcours en profondeur

Une approche par « BackTracking »

Page 32: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Parcours en profondeur

AF

G

DB

C

E

A

Nœud de départ

Pile

Page 33: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Parcours en profondeur

AF

G

DB

C

ENœud de départ

Pile

Dépilé: A

Page 34: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Parcours en profondeur

AF

G

DB

C

E

G ; B ; F

Nœud de départ

Pile

Dépilé: A

Page 35: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Parcours en profondeur

AF

G

DB

C

E

G ; B

Nœud de départ

Pile

Dépilé: F

Page 36: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Parcours en profondeur

AF

G

DB

C

E

G

Nœud de départ

Pile

Dépilé: B

Page 37: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Parcours en profondeur

AF

G

DB

C

E

G ; C ; D

Nœud de départ

Pile

Dépilé: B

Page 38: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Parcours en profondeur

AF

G

DB

C

E

G ; C

Nœud de départ

Pile

Dépilé: D

Page 39: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Parcours en profondeur

AF

G

DB

C

E

G

Nœud de départ

Pile

Dépilé: C

Page 40: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Parcours en profondeur

AF

G

DB

C

ENœud de départ

Pile

Dépilé: G

Page 41: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Parcours en profondeur

AF

G

DB

C

ENœud de départ

Pile

FIN

Page 42: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Parcours par sondage

Questions

• Peut-on parcourir tout un graphe avec ce type de parcours ?

• Comment l’algorithme s’aperçoit-il qu’il est dans un cul-de-sac et qu’il doit faire du retour-arrière (« backtracking ») ?

• Est-ce que ce parcours peut être utilisé pour trouver le chemin le plus court ?

• Quelle est la complexité de l’algorithme de parcours en profondeur?

L’algorithme prend un temps O(n+m)

Page 43: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Comparaison des deux parcours

Le graphe correspondant est obtenu en plaçant un sommet en chaque point du labyrinthe où il y a plus d'un chemin possible et, ensuite, en connectant les sommets conformément à l'architecture du labyrinthe.

Page 44: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Comparaison des deux parcours

Page 45: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Spécifications de l’interface du type Graphe

Description en termes de types abstraits

1. ajouter un sommet à un graphe 2. ajouter un arc/arête à un graphe3. ôter un sommet du graphe et tous les arcs/arêtes associés4. ôter un arc/arête 5. permettre l'accès à un sommet nommé (désigné)6. indiquer si un sommet n'a pas de voisins7. parcourir les voisins d'un sommet (parcours) 8. voir si un chemin existe entre 2 sommets9. trouver le chemin le plus court (# arêtes, distance)10. trouver tous les chemins entre 2 sommets• Etc..

Page 46: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Implantation

Il existe deux principales méthodes de modélisation des graphes en tant que type abstrait:

les matrices et les listes dites de connectivité ou d'adjacence.

Le choix entre elles se fera en fonction de la densité du graphe. Par densité, on entend la proportion d'arcs effectifs par rapport au nombre maximum d'arcs ou d’arêtes possibles:

NbArcs / NbSommets2 dans le cas de graphe orienté.NbAretes / (NbSommets(NbSommets-1)/2) dans le cas d’un graphe non orienté

Page 47: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Implantation

Matrice d’adjacence

• Une matrice de valeurs booléennes de dimension NbSommets*NbSommets pour indiquer qu'il y a un arc entre un sommet x et un sommet y.

• On suppose que les sommets du graphe sont étiquetés de 0 à N• S’il existe une arête/arc du sommet i au sommet j, on met 1 à la

position A[i][j], sinon on met 0 comme valeur.• Si le graphe est valué, on met à la position A[i][j], le poids associé à

l’arête/arc, 0 pour la position A[i][i], ailleurs.• Si le graphe est peu dense, ce qui est souvent le cas, il y aura

beaucoup de 0 dans la matrice.• Cette méthode de représentation est donc indiquée si le graphe est

dense car il faut NbSommets2 booléens pour stocker le graphe et NbSommets2 étapes pour initialiser la matrice.

Page 48: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Implantation

Listes d’adjacence

• Pour chaque sommet, on associe une liste de tous les autres sommets auquel il est lié par une arête dont il est l’origine

• En principe (tout comme avec la matrice d’adjacence), il faut une table qui associe l’identificateur de chaque sommet à un numéro interne dans la représentation

• En C++, cette table peut nous retourner un pointeur sur la structure qui représente le sommet

Page 49: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Interface

template <typename T>class Graphe {public:/** Constructeur (graphe vide)*/ Graphe(); /** Constructeur à partir des sommets et arcs/arêtes*/ Graphe(vector<T> sommets, vector<Arete> aretes); Graphe (const Graphe&); Graphe(const Graphe&g, const std::vector<T>&sommets); ~Graphe (); Graphe& operator = (const Graphe&); void ajouterSommet(const T& s); void ajouterArc (const T& s1, const T& S2); void enleverArc (const T& s1, const T& s2); void enleverSommet ( const T& s); bool sommetExiste(const T& s) const; int nbSommets() const; // etc... private: //…

class Arete{public: int u; int v; Arete(int u, int v) {this->u = u; this->v = v; }}

class Sommet{public: …getData(); void setData(..); //etc..

private: … data; int no; int tag; bool pres;}

Page 50: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Classe Graphe

template <typename T>class Graphe {public: //..private:

int nbSommets;T* sommets;

int **mat; //implémentation dans une matrice} // de sommets adjacents

4

25

3

1

Cas d’un graphe orienté

Implantation dans une matrice d’adjacence

Page 51: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Classe Graphe

template <typename T>class Graphe {public: //..private:

int nbSommets;T* sommets;

int **mat; // trop de perte mémoire!!

}

Cas d’un graphe non orienté

4

25

3

1

Implantation dans une matrice d’adjacence

Page 52: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Matrice triangulaire

matrice d’adjacence : (avec graphe non orienté)

On peut, pour un graphe non-orienté, économiser de l'espace en ne stockant que le triangle supérieur de la matrice symétrique.

Matrice triangulaire possède 1 + 2 + 3 + ... + n = [n (n+1)] / 2 éléments.

On la représente dans un tableau à une dimension (ou vector) ayant ce même nombre d'éléments.

Si on la range par ligne, alors le tableau aura l'allure suivante :A00 A10 A11 A20 A21 A22 A30 ... An-1n-1

Si A00 est en position 0, alors l'adresse de tout lément Aij est donnée par :

( i +1 ) * i / 2 + j

Ainsi, la position de A42 dans la matrice est équivalent à la position 12 dans le tableau.

4

25

3

1

Page 53: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Classe Graphe

template <typename T>class Graphe {public: //..private:

int nbSommets;T* sommets;

int *mat; // tableau à une dimension

}

Cas d’un graphe non orienté

4

25

3

1

Implantation dans une matrice d’adjacence

1

1 1

1 1

1

0

1

2

3

4 1

1 1

1

1

1

11 11 11

( i + 1 ) * i / 2 + j

Page 54: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Classe Graphe

template <typename T>class Graphe {public: //..private:

vector<T> sommets; // Les sommets vector< vector<int> > voisins; // Les sommets adjacents

}

Implantation dans une matrice d’adjacence

Utilisation de vector de la STL

Page 55: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Classe Graphe

Implantation dans une matrice d’adjacence

Remarque

• Dans ce type de représentation, on n’a pas le choix que de représenter les données reliées aux sommets dans une structure séparée.

sommets =

Page 56: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Classe Graphe

template <typename T>class Graphe { public: //.. private:

private:class Noeud{ public:

T data; /* au lieu de T data, on peut avoir T* ou int*/Noeud * suivant; /* chaînage des sommets adjacents */

};/* le noeud typique du graphe */int nbSommet; /* nombre de sommets dans le graphe */int nbSommetMax; /* nombre total possible de sommets */T * sommet; /* tableau représentant les sommets*/Noeud** listeSommet; /* les listes de sommets adjacents*/

}

Implantation dans une liste de sommets adjacents

2 3123

1

1

2

1

2 3

Page 57: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Classe Graphe

template <typename T>class Graphe { public: //.. private:

class Noeud { public: T data; //données

// dans un sommet list<int> voisins; };

vector<Noeud> listeSommets;}

Implantation dans une liste de sommets adjacents

Utilisation de vector et list de la STL

Page 58: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Classe Graphe

Implantation dans une liste de sommets adjacents

Cas d’un graphe non orienté

• La liste des sommets adjacents

soufre de la même redondance que

nous avons rencontrer avec les matrices de sommets adjacents.

• Une solution plus efficace • utilisation de listes

d’arêtes• Elle consiste à lier les arêtes

• un lien pour chaque arête• vers les 2 sommets

délimitant l’arête.

Page 59: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Classe Graphe

template <typename T>class Graphe { public: //.. private:

class AreteNode { public:

int sommet[2]; AreteNode * lien[2];

}; typedef AreteNode * AretePtr;

class Noeud { public: T data; AretePtr first; };vector<Noeud> listeSommets;

}

Cas d’un graphe non orienté

Liste des arêtes

BB

4

Page 60: Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

Classe Graphe

Liste des arêtes

Chaque AreteNode représente une arête• sommet[1] et sommet[2] sont les sommets directement connectés par cette arête.• Lien[1] pointe vers un autre AreteNode ayant sommet[1] comme délimitateur.• Lien[2] pointe vers un autre AreteNode ayant sommet[2] comme délimitateur.

BB