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
- 1Créer une classe
GrapheOriente. - 2Implémenter le constructeur
__init__(self)qui initialise un attributdico_adjacenceà un dictionnaire vide.
Gestion des sommets
- 1Implémenter la méthode
ajouter_sommet(self, sommet)qui ajoute le sommet au graphe s’il n’existe pas déjà. - 2Implémenter la méthode
sommets(self)qui retourne la liste des sommets du graphe, triée dans l’ordre croissant. - 3Implé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.
- 1Implé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.
- 2Implé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é
- 1Implémenter la méthode
voisins(self, sommet)qui retourne la liste des voisins accessibles depuissommet, triée. - 2Implé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
- 1Recréer le graphe suivant :
- 2L'afficher.
- 3Afficher les voisins de
B. - 4Compter 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
- 1Pour 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
- 1Redé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é
- 1Redéfinir la méthode
degre(self, sommet)pour qu’elle retourne le nombre de voisins du sommet. - 2Tester la méthode sur plusieurs sommets.
Exercice
- 1Recréer le graphe suivant :
- 2L'afficher.
- 3Afficher les voisins de
G. - 4Compter 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.