TP3 – Conversion et représentations des graphes
- Comprendre qu’un même graphe peut avoir plusieurs représentations.
- Savoir passer d’une liste d’adjacence à une matrice d’adjacence.
- Exploiter une matrice d’adjacence pour analyser un graphe.
- Consolider la manipulation des listes et des dictionnaires en Python.
- Avoir réalisé les TP1 et TP2 sur les graphes.
- Maîtriser la représentation par liste d’adjacence.
- Toutes les méthodes demandées seront ajoutées à la classe
GrapheOriente. - Elles seront automatiquement disponibles pour
GrapheNonOrientegrâce à l’héritage. - Les sommets seront considérés dans l’ordre alphabétique.
Dans ce TP, nous allons travailler sur un changement de représentation des graphes.
Jusqu’à présent, les graphes étaient représentés par une liste d’adjacence.
Nous allons maintenant introduire une seconde représentation : la matrice d’adjacence.
Rappel : matrice d’adjacence
Une matrice d’adjacence est un tableau à deux dimensions.
- Les lignes correspondent aux sommets de départ ;
- Les colonnes correspondent aux sommets d’arrivée ;
- La valeur :
1indique l’existence d’un arc (ou d’une arête) ;0indique son absence.
Exemple :
matrice = [
[0, 1, 0],
[0, 0, 1],
[1, 0, 0]
]
Ici, le sommet 0 est relié au sommet 1, le sommet 1 au sommet 2, et le sommet 2 au sommet 0.
Conversion vers une matrice d’adjacence
On souhaite maintenant écrire une méthode permettant de convertir le graphe (stocké en liste d’adjacence) en matrice d’adjacence.
- Implémenter la méthode
conversion_vers_matrice(self)qui :- retourne une matrice (liste de listes) ;
- respecte l’ordre alphabétique des sommets ;
- place
1lorsqu’un arc existe,0sinon.
- Tester la méthode sur un graphe orienté puis sur un graphe non orienté.
Associer sommets et indices
Dans une matrice, les sommets sont représentés par des indices numériques.
Il est donc nécessaire de connaître la correspondance entre les sommets et les indices de lignes / colonnes.
- Implémenter la méthode
correspondance_indices(self)qui retourne un dictionnaire :{
"A": 0,
"B": 1,
"C": 2,
...
} - Vérifier que cette correspondance est cohérente avec la matrice obtenue précédemment.
Degré à partir de la matrice
On souhaite maintenant calculer le degré d’un sommet à partir de la matrice d’adjacence.
- Implémenter la méthode
degre_matrice(self, sommet)qui :- utilise la matrice d’adjacence ;
- retourne le degré du sommet passé en paramètre.
- Comparer les résultats avec la méthode
degredéjà implémentée précédemment.
Symétrie de la matrice
Dans un graphe non orienté, la matrice d’adjacence est symétrique.
- Écrire une méthode
est_symetrique(self)qui :- retourne
Truesi la matrice d’adjacence du graphe est symétrique ; - retourne
Falsesinon.
- retourne
- Tester cette méthode sur un graphe orienté puis sur un graphe non orienté.
Pour aller plus loin
- Écrire une méthode
conversion_depuis_matrice(self, matrice, sommets)permettant de reconstruire un graphe à partir d’une matrice d’adjacence. - Comparer les avantages et inconvénients des deux représentations :
- liste d’adjacence ;
- matrice d’adjacence.