Une seconde implémentation : modéliser les matrices d'adjacences
Nous avons vu en cours comment représenter un graphe avec une matrice. Nous allons implémenter cette représentation en python.
La matrice ne contient pas les noms des sommets. En réalité, il n'est pas très pratique de modéliser cette matrice en utilisant des listes de listes, créer une classe graphe serait bien mieux adapté et nous y viendrons ensuite. Néanmoins il est possible de modéliser les graphes avec simplement une liste de liste pour la matrice d'adjacence, mais cela nous oblige à conserver en plus de la matrice, un vecteur contenant les clés.
Pour cette raison, le graphe sera donc représenté ainsi :
G={ 'cles' : [liste des cles] , 'matrice' : [ [...] [...]...[...] ] }
Attention, cette implémentation est difficile et non exigible, mais essayez de l'étudier de près, elle est riche en enseignements. Pour des raisons technique (limite du nombre de ligne des codes exemple) ce code est très condensé et manque de lisibilité, ce n'est pas très recommandé de mettre plusieurs instructions sur une même ligne... |
Bien que l'implémentation soit plus compliquée, vous remarquerez que la création d'un graphe est ensuite identique au cas des graphes implémentés avec une liste d'adjacence et un dictionnaire puisque les primitives sont identiques avec les mêmes arguments.
Modifier l'implémentation pour modéliser des graphes orientés, et/ou pondérés, ne poserait pas de grandes difficultés.
L'exercice ci-dessous va vous permettre d'utiliser cette nouvelle implémentation pour générer un graphe avec sa matrice d’adjacence.
Les fonctions ajouterArete, ajouterSommet, creerGrapheVide, estVideGraphe, existeArete, existeSommet, showG, supprimerArete, et supprimerSommet ont été défini préalablement et n'apparaissent pas dans le code ci-dessous |