Prérequis : dictionnaires pour les représentations, notions de base en mathématiques (ensembles, couples)
À l’issue de ce chapitre, vous saurez :
Un graphe est la donnée d’un ensemble de sommets et d’un ensemble d’arêtes qui relient deux sommets.
L’ordre du graphe est le nombre de ses sommets.
Une boucle est une arête reliant un sommet à lui-même (la rue 4 ci-dessus).
Deux sommets reliés par une arête sont dits adjacents.
Un graphe simple est un graphe sans boucle et tel qu’entre deux sommets, il y a au plus une arête.
Un graphe orienté est un graphe tel que ses arêtes ont un sens de parcours. On parle aussi d’arcs au lieu d’arêtes dans un graphe orienté.
Un graphe complet est un graphe dont tous les sommets sont reliés deux à deux par une unique arête.
Le degré d’un sommet est égal au nombre de fois où le sommet est l’extrémité d’une arête.
La somme des degrés de tous les sommets d’un graphe est égale au double du nombre total d’arêtes : \[\sum_{S\text{ sommet}} deg(S)=2\times\text{Nombre d’arêtes.}\]
Dans un graphe complet d’ordre \(n\) (avec \(n\) sommets), le degré d’un sommet est égal à \(n-1\). Le graphe complet d’ordre 5 est donné ci-dessus.
Le graphe donné en introduction de ce chapitre admet une chaîne eulérienne. La voici : Piscine - Lycée - Lycée - Boulangerie - Maison - Boulangerie - Centre commercial - Maison - Piscine - Centre commercial. Elle part de la Piscine et arrive au Centre commercial, les deux seuls sommets de degré impair (degré 3).
Un graphe admet une chaîne eulérienne si, et seulement si, ce graphe est connexe et il a exactement aucun ou deux sommets de degré impair. Dans le cas d’un graphe connexe ayant aucun sommet de degré impair, la chaîne eulérienne est, plus précisément, un cycle eulérien.
L’hypothèse « le graphe est connexe » est aussi très importante ! En plus de l’étude des degrés des sommets, il faudra vérifier à chaque fois cette hypothèse.
Soit \(G\) un graphe d’ordre \(n\) dont les sommets sont numérotés de 1 à \(n\). La matrice d’adjacence du graphe \(G\) est la matrice carrée \(A\) de taille \(n\), où \(a_{ij}\), le coefficient sur la \(i-\text{ième}\) ligne et \(j-\text{ième}\) colonne, est égal au nombre d’arêtes reliant les sommets \(i\) et \(j\). Lorsque \(i\) et \(j\) ne sont pas adjacents, alors \(a_{ij} = 0\). Si le graphe \(G\) est orienté, \(a_{ij}\) est le nombre d’arêtes allant du sommet \(i\) vers le sommet \(j\).
Complément hors programme. Soit \(G\) un graphe et \(A\) sa matrice d’adjacence et \(p\) un entier. Soit \(M=A^p\) la matrice « puissance \(p-\text{ième}\) de A » : \(A^p=A\times\cdots\times A\). Le coefficient \(m_{ij}\) de la matrice \(A^p\) est égal au nombre de chaînes de longueur \(p\) reliant le sommet \(i\) au sommet \(j\).
Le graphe du début de ce cours peut être modifié pour indiquer les distances (en km) plutôt que les noms des rues. Il devient un graphe pondéré. Le plus court chemin de la maison au lycée est alors celui passant par la boulangerie.
Attention. On verra qu’une plus courte chaine ne passe pas nécessairement par le moins d’arêtes possibles. Il faut bien distinguer le poids d’une chaîne (la somme des étiquettes) et sa longueur (le nombre d’arêtes parcourues).
Soit le graphe non orienté \(G\) suivant :
On considère la matrice d’adjacence suivante :
$$M = \begin{pmatrix} 0 & 1 & 1 & 0 \\ 1 & 0 & 0 & 1 \\ 1 & 0 & 0 & 1 \\ 0 & 1 & 1 & 0 \end{pmatrix}$$
Les sommets sont numérotés \(S_0, S_1, S_2, S_3\).
On représente un graphe par un dictionnaire d’adjacence :
graphe = {
"A": ["B", "C"],
"B": ["A", "D", "E"],
"C": ["A", "D"],
"D": ["B", "C", "E"],
"E": ["B", "D", "F"],
"F": ["E"]
}
degre(graphe, sommet) qui renvoie le degré d’un sommet.nb_aretes(graphe) qui renvoie le nombre d’arêtes du graphe.voisins_communs(graphe, s1, s2) qui renvoie la liste des voisins communs à deux sommets.def degre(graphe, sommet):
return len(graphe[sommet])
def nb_aretes(graphe):
total = 0
for sommet in graphe:
total = total + len(graphe[sommet])
return total // 2
def voisins_communs(graphe, s1, s2):
communs = []
for s in graphe[s1]:
if s in graphe[s2]:
communs.append(s)
return communs