Les Graphes

1. Qu’est-ce qu’un graphe ?

Un graphe est une structure mathématique utilisée pour modéliser des relations entre des objets appelés sommets (ou nœuds). Ces sommets sont reliés entre eux par des arêtes (ou arcs).


1.1 Types de graphes


2. Représentations d’un graphe

Il existe plusieurs façons de représenter un graphe dans un programme informatique. Les plus courantes sont :

2.1 Liste d’adjacence (recommandée)

Exemple (graphe non orienté) :

graphe = {
    0: [1, 2],
    1: [0, 3],
    2: [0],
    3: [1]
}

Ici, le sommet 0 est relié à 1 et 2, le sommet 1 est relié à 0 et 3, etc.


2.2 Matrice d’adjacence

Exemple (graphe non orienté, 4 sommets) :

matrice = [
	[0, 1, 1, 0],
	[1, 0, 0, 1],
	[1, 0, 0, 0],
	[0, 1, 0, 0]
]
0123
00110
11001
21000
30100

3. Parcours de graphes

Traverser un graphe signifie visiter ses sommets dans un ordre spécifique. C’est une étape clé dans beaucoup d’algorithmes.

On distingue deux parcours classiques :


3.1 Parcours en profondeur (DFS - Depth First Search)


Principe de fonctionnement :

  1. On commence par un sommet donné,
  1. On marque ce sommet comme visité,
  1. On explore récursivement chaque voisin non visité,
  1. Quand on a fini tous les voisins, on revient en arrière.

Exemple en Python (avec liste d’adjacence) :

def dfs(graphe, sommet, visites=None):
    if visites is None:
        visites = set()  # ensemble des sommets visités
    visites.add(sommet)
    print(sommet)  # traiter ou afficher le sommet
    for voisin in graphe[sommet]:
        if voisin not in visites:
            dfs(graphe, voisin, visites)

3.2 Parcours en largeur (BFS - Breadth First Search)


Principe de fonctionnement :

  1. On commence par un sommet initial,
  1. On place ce sommet dans une file d’attente,
  1. Tant que la file n’est pas vide :
    • On retire le sommet en tête,
    • On visite ce sommet,
    • On ajoute tous ses voisins non visités à la file.

Exemple en Python :

def bfs(graphe, sommet):
    visites = set()
    file = [sommet]  # la "file" est une liste ordinaire
    visites.add(sommet)

    while file:
        current = file.pop(0)  # retirer le premier élément (tête de file)
        print(current)  # traiter ou afficher le sommet
        for voisin in graphe[current]:
            if voisin not in visites:
                visites.add(voisin)
                file.append(voisin)  # ajouter à la fin (queue)

4. Applications classiques des graphes


5. Concepts supplémentaires utiles

5.1 Connexité


5.2 Cycle


5.3 Graphe pondéré et algorithmes


6. Résumé

ConceptDescription
GrapheEnsemble de sommets reliés par des arêtes
Liste d’adjacenceDictionnaire : sommet → liste des voisins
Matrice d’adjacenceMatrice indiquant la présence d’arêtes
DFS (profondeur)Explore en profondeur, récursif
BFS (largeur)Explore en largeur, itératif
ConnexitéTous sommets reliés entre eux
CycleChemin fermé dans le graphe