Les Graphes
Structures relationnelles : pourquoi des graphes ?
Contrairement aux arbres qui imposent une hiérarchie stricte (un fils n'a qu'un seul père), le graphe est une structure de données permettant de modéliser des relations libres et complexes entre des entités.
Objectifs
- Modéliser des situations concrètes (réseaux sociaux, routage, cartes).
- Maîtriser le vocabulaire : sommets, arcs, arêtes, orientation, connexité.
- Implémenter un graphe en Python via une matrice ou une liste d'adjacence.
Exemple 1 : Réseau routier
Exemple 2 : Réseau web
Exemple 3 : Réseau social
Vocabulaire technique
- Les éléments du graphe sont appelés des sommets (ou nœuds).
- Une relation entre deux sommets est :
- Une arête dans un graphe non-orienté (relation symétrique).
- Un arc dans un graphe orienté (relation à un sens, représentée par une flèche).
- Le degré d'un sommet est le nombre d'arêtes qui lui sont liées.
- Un chemin est une suite de sommets reliés par des arêtes/arcs. Si le chemin revient à son point de départ, on parle de cycle.
- Un graphe est connexe s'il existe toujours un chemin entre n'importe quelle paire de sommets.
Représentations en machine
Il existe deux méthodes principales pour coder un graphe en informatique :
1. La liste d'adjacence
On associe à chaque sommet la liste de ses voisins (ses successeurs). En Python, on utilise souvent un dictionnaire où les clés sont les sommets et les valeurs sont des listes :

2. La matrice d'adjacence
Il s'agit d'un tableau à deux dimensions (matrice). Si le graphe possède n sommets, la matrice est de taille n*n. La case (i, j) contient 1 s'il existe un lien entre le sommet i et le sommet j, sinon 0.
Exemples :

Implémentation en Python
Nous allons utiliser la programmation orientée objet pour manipuler un graphe représenté par une liste d'adjacence (via un dictionnaire) :

