TP1 - Création de graphes
- Comprendre la structure des graphes ;
- Manipuler des classes ;
- Différencier des Graphes non orientés des orientés.
Suivre le cours sur les graphes.
- Créer un dossier
Graphes - Créer un fichier
Classes_Graphe
Pour chaque fonction créée, ne pas oublier de la documenter.
Graphes orientés
Dans cette première partie, nous allons implémenter une classe permettant de manipuler des graphes orientés à l’aide d’une liste d’adjacence.
La liste d’adjacence sera représentée en Python par un dictionnaire :
- chaque clé représente un sommet ;
- la valeur associée est la liste des sommets accessibles depuis ce sommet.
Si on regarde le dictionnaire suivant :
d = {"A":["B", "D"], "B":["A", "C"], "C":["A"], "D":[]}
Cela représente le graphe orienté suivant :
Création de la classe GrapheOriente
- Créer une classe
GrapheOriente. - Implémenter le constructeur
__init__(self)qui initialise un attributdico_adjacenceà un dictionnaire vide.
Gestion des sommets
- Implémenter la méthode
ajouter_sommet(self, sommet)qui ajoute le sommet au graphe s’il n’existe pas déjà. - Implémenter la méthode
sommets(self)qui retourne la liste des sommets du graphe, triée dans l’ordre croissant. - Implémenter la méthode
contient_sommet(self, sommet)qui retourneTruesi le sommet est présent dans le graphe,Falsesinon.
g = GrapheOriente()
g.ajouter_sommet("A")
g.ajouter_sommet("B")
g.ajouter_sommet("C")
print(g.sommets())
# ['A', 'B', 'C']
print(g.contient_sommet("B"))
# True
print(g.contient_sommet("D"))
# False
Gestion des arcs
Dans un graphe orienté, un arc relie un sommet de départ vers un sommet d’arrivée.
- Implémenter la méthode
ajouter_arc(self, sommet_1, sommet_2)qui :- ajoute les sommets au graphe s’ils n’existent pas ;
- ajoute un arc orienté de
sommet_1verssommet_2.
- Implémenter la méthode
arc_existe(self, sommet_1, sommet_2)qui retourneTruesi un arc desommet_1verssommet_2existe.
g = GrapheOriente()
g.ajouter_arc("A", "B")
g.ajouter_arc("A", "C")
g.ajouter_arc("B", "C")
print(g.arc_existe("A", "B"))
# True
print(g.arc_existe("C", "A"))
# False
Voisins et degré
- Implémenter la méthode
voisins(self, sommet)qui retourne la liste des voisins accessibles depuissommet, triée. - Implémenter la méthode
degre(self, sommet)qui retourne le degré total du sommet (degré entrant + degré sortant).RappelDans un graphe orienté :
- le degré sortant correspond au nombre d’arcs qui partent du sommet ;
- le degré entrant correspond au nombre d’arcs qui arrivent sur le sommet.
- Télécharger le fichier python afficheur_graphe à mettre dans le même dossier que le fichier
Classes_Graphe; - Utiliser la fonction
afficher_graphe(graphe), oùgraphereprésente une instance d'un graphe.
Attention à nommer de la même façon la classe et les attributs.
Exercice
- Recréer le graphe suivant :
- L'afficher.
- Afficher les voisins de
B. - Compter le degré de
E.
Graphes non orientés
Dans cette seconde partie, nous allons implémenter une classe permettant de manipuler des graphes non orientés.
Dans un graphe non orienté, on parle d’arête : si un sommet A est relié à un sommet B, alors B est aussi relié à A.
La classe GrapheNonOriente héritera de la classe GrapheOriente.
Création de la classe GrapheNonOriente
- Pour définir la classe
GrapheNonOrientehéritant deGrapheOriente, écrire la ligne suivante :class GrapheNonOriente(GrapheOriente):
Lorsqu’une classe hérite d'une autre classe, c’est comme si tout le code de la première classe était copié dans la nouvelle.
Le terme "redéfinir" signifie "récrire" le code d’une méthode dans la nouvelle classe pour l’adapter à un comportement voulu. Il suffit donc de récrire la fonction correspondante.
Gestion des arêtes
- Redéfinir la méthode
ajouter_arc(self, sommet_1, sommet_2)afin que :sommet_2soit ajouté aux voisins desommet_1;sommet_1soit ajouté aux voisins desommet_2.
g = GrapheNonOriente()
g.ajouter_arc("A", "B")
g.ajouter_arc("A", "C")
print(g.arc_existe("A", "B"))
# True
print(g.arc_existe("B", "A"))
# True
Degré d’un sommet dans un graphe non orienté
- Redéfinir la méthode
degre(self, sommet)pour qu’elle retourne le nombre de voisins du sommet. - Tester la méthode sur plusieurs sommets.
Exercice
- Recréer le graphe suivant :
- L'afficher.
- Afficher les voisins de
G. - Compter le degré de
I.
Pour réfléchir davantage
Faire une méthode :
supprimerArc(self, sommet1,sommet2)permettant la suppression de l'arc allant de sommet1 vers sommet2 ;supprimer_sommet(self, sommet)permettant de supprimer un sommet du graphe. Le sommet doit être supprimé :- de la liste des sommets ;
- de toutes les listes de voisins des autres sommets.
nombre_arcs(self)qui retourne le nombre total d’arcs du graphe.