Académique Documents
Professionnel Documents
Culture Documents
Définition
Un graphe est un ensemble de sommets reliés entre eux par des arcs.
Un chemin est dit simple s'il n'emprunte pas deux fois le même arc, et
élémentaire s'il ne passe pas deux fois par le même sommet. Un chemin
simple reliant un sommet à lui-même et contenant au moins un arc est appelé
un cycle. (Notons que, dans le cas d'un graphe non orienté, la restriction
imposant aux cycles d'être des chemins simples empêche de revenir sur ses
pas. Ainsi dans le chemin A -> B -> A n'est pas simple et n'est donc pas un
cycle.
Distance
La longueur d'un chemin est définie comme le nombre d'arcs qui constituent
ce chemin. La distance entre deux sommets est la longueur du plus court
chemin reliant ces deux sommets. La distance entre deux sommets n'est pas
définie s'il n'existe aucun chemin entre les deux sommets.
14 - Graphe
Connexité
On dit qu'un graphe non orienté est connexe si, pour toute paire u, v de
sommets, il existe un chemin de u à v. Pour un graphe orienté, on dit qu'il
est connexe si le graphe non orienté obtenu en oubliant le sens des arcs
est connexe.
class Graphe:
"""
Un graphe représenté par une matrice d'adjacence, où les
sommets sont les entiers 0, 1, ..., n-1
"""
def __init__(self, n) :
self.n = n
self.adj = [[False] * n for _ in range (n)]
Dictionnaire d'adjacence
class Graphe:
"""
Un graphe comme un dictionnaire d'adjacence
"""
def __init__(self) :
self.adj = {}
def ajouter_sommet(self, s) :
if s not in self.adj:
self.adj[s] = set()
self.adj[s1][s2] = True
self.adi[s2][s1] = True
self.ajouter_sommet(s1)
self.ajouter_sommet(s2)
self.adj[s1].add (s2)
self.adj[s2].add(s1)
Exercice 1
Dessiner tous les graphes non orientés ayant exactement trois sommets.
Exercice 2
Combien y a-t-il de graphes orientés ayant exactement trois sommets? On ne
demande pas de les dessiner tous, mais seulement de les dénombrer.
Exercice 3
Ajouter à la classe Graphe (avec la matrice d'adjacence) une méthode
afficher() pour afficher le graphe sous la forme suivante
0 -> 1 3
1 -> 2 3
2 -> 3
3 -> 1
c'est-à-dire une ligne par sommet, avec pour chacun la liste de ses
voisins.
Exercice 4
Ajouter à la classe Graphe (avec le dictionnaire d'adjacence) une méthode
afficher() pour afficher le graphe sous la forme suivante
0 {1, 3}
1 {2, 3}
3 {1}
2 {3}
c'est-à-dire une ligne par sommet, avec pour chacun l'ensemble de ses
voisins. L'ordre des sommets n'est pas important. L'ensemble des voisins
peut être affiché directement avec print.
Exercice 5
Ajouter à la classe Graphe (avec le dictionnaire d'adjacence) une méthode
nb_sommets() qui donne le nombre de sommets du graphe.
14 - Graphe
Exercice 6
Ajouter à la classe Graphe (avec la matrice d'adjacence) une méthode
degre(s) qui donne le nombre d'arcs issus du sommet s. On appelle cela le
degré du sommet s.
Exercice 7
En utilisant l'exercice précédent, ajouter à la classe Graphe (avec la
matrice d'adjacence) une méthode nb_arcs() qui donne le nombre total d'arcs
du graphe.
Exercice 8
Ajouter à la classe Graphe (avec la matrice d'adjacence) une méthode
degre(s) qui donne le nombre d'arcs issus du sommet s. On appelle cela le
degré du sommet s.
Exercice 9
En utilisant l'exercice précédent, ajouter à la classe Graphe (avec le
dictionnaire d'adjacence) une méthode nb_arcs() qui donne le nombre total
d'arcs du graphe.
Exercice 10
Ajouter aux classes Graphe une méthode supprimer_arc(s1, s2) pour supprimer
l'arc entre les sommets s1 et s2. S'il n'y a pas d'arc entre ces sommets,
la méthode n'a aucun effet. On supprime un élément d'un ensemble avec sa
méthode remove().