Aller au contenu

Numérique et sciences informatiques (spécialité) · TerminaleBac

Parcours de graphes (largeur, profondeur) : cours de NSI Terminale

Publié le 7 novembre 2026 · Mis à jour le 7 novembre 2026 · Signaler une erreur

L'essentiel

  • Un parcours visite les sommets d'un graphe à partir d'une source, chacun une seule fois grâce au marquage des sommets déjà vus.4
  • Le parcours en largeur (BFS) utilise une file : il explore la source, puis ses voisins, puis les voisins de ses voisins.4
  • Le parcours en profondeur (DFS) s'enfonce dans un chemin jusqu'à un cul-de-sac, puis revient en arrière ; il s'écrit naturellement en récursif, ou avec une pile.54
  • Le BFS donne les distances depuis la source dans un graphe non pondéré ; les deux parcours donnent les sommets accessibles et les composantes connexes.45
  • Pour choisir : plus court chemin en nombre d'arêtes, c'est le BFS ; exploration exhaustive d'un chemin, c'est le DFS.

Pourquoi parcourir un graphe ?

Tu as déjà travaillé sur les arbres binaires : à partir de la racine, tu sais visiter tous les nœuds, en passant par les sous-arbres gauche et droit. Un graphe généralise cette situation. Il n'y a plus de racine imposée, un sommet peut être relié à plusieurs autres, et on peut revenir par un autre chemin sur un sommet déjà rencontré.

On veut pourtant répondre à des questions très concrètes : est-ce que je peux aller du sommet A au sommet G ? Combien d'arêtes faut-il traverser au minimum ? Le réseau est-il en un seul morceau ? Pour y répondre, il faut un procédé systématique qui visite les sommets sans en oublier et sans tourner en rond. C'est le rôle des algorithmes de parcours.

Deux parcours sont au programme de la spécialité NSI : le parcours en largeur et le parcours en profondeur.12 Dans ce cours, tu vas :

  • comprendre l'idée de chacun, avec des schémas de déroulement pas à pas ;
  • les écrire en Python, avec le bon outil (file, pile ou récursivité) ;
  • savoir lequel choisir selon la question posée, et les utiliser pour calculer des distances et des composantes connexes.

Rappels : graphe, voisins, chemins et représentation en Python

Le parcours en largeur (BFS)

Le fonctionnement repose sur une file : on sort le sommet qui est en tête, puis on range tout au bout de la file ceux de ses voisins qui n'ont pas encore été vus.4 Comme une file ressort les éléments dans l'ordre où ils sont arrivés (premier entré, premier sorti), les sommets découverts les premiers sont aussi traités les premiers. C'est ce qui garantit l'exploration « couche par couche ».

Pour ne jamais explorer deux fois le même sommet, on marque les sommets déjà visités.4 Sans ce marquage, un graphe qui contient un cycle ferait tourner l'algorithme indéfiniment : on repasserait sans cesse par les mêmes sommets. Dans un arbre, aucun cycle n'existe et le marquage devient inutile.4

Les étapes du parcours en largeurQuatre étapes successives du parcours en largeur : initialiser la file, retirer le premier sommet, ajouter ses voisins non marqués, répéter jusqu'à file vide.1InitialiserMettre la source dans la file et la marquer.2DéfilerRetirer le sommet en tête de file.3AjouterMarquer ses voisins et les ajouter en fin de file.4RépéterRecommencer tant que la file n'est pas vide.
  1. InitialiserMettre la source dans la file et la marquer.
  2. DéfilerRetirer le sommet en tête de file.
  3. AjouterMarquer ses voisins et les ajouter en fin de file.
  4. RépéterRecommencer tant que la file n'est pas vide.
Les étapes du parcours en largeur · Marquer à l'ajout dans la file évite les doublons.
Trace du parcours en largeur depuis A
Sommet défiléFile ensuiteSommets marqués
AB, CA, B, C
BC, D, EA, B, C, D, E
CD, E, FA, B, C, D, E, F
DE, FA, B, C, D, E, F
EFA, B, C, D, E, F
FGA, B, C, D, E, F, G
GvideA, B, C, D, E, F, G
Trace du parcours en largeur depuis A · Chaque ligne traite un seul sommet.

Le parcours en largeur calcule des distances

Pourquoi cette propriété est-elle vraie ? Voici l'idée, qui est un raisonnement et non une démonstration complète. Au départ, la file contient seulement la source, à distance 0. Quand on la retire, on ajoute ses voisins, tous à distance 1. Quand on retire ensuite ces sommets à distance 1, on ajoute leurs voisins non marqués, qui sont à distance 2, et ils se placent derrière tous ceux de distance 1 déjà présents. Comme la file est respectée, on ne traite jamais un sommet à distance d+1d+1 avant d'avoir traité tous les sommets à distance dd.

Pour exploiter cette propriété, il suffit de noter, pour chaque sommet découvert, la distance de son prédécesseur augmentée de 1.

Le parcours en profondeur (DFS)

Le principe est celui d'un promeneur têtu : depuis un sommet, il choisit un voisin et avance, puis choisit un voisin du voisin, et ainsi de suite. Il suit ainsi un chemin jusqu'à une impasse ou jusqu'à rencontrer un sommet déjà vu. Il remonte alors jusqu'au dernier sommet qui offrait une autre direction, et part explorer celle-ci. Le parcours prend fin quand tous les sommets atteignables depuis la source ont été vus.5

Le nom vient de cette manière d'aller « à fond » dans chaque chemin avant d'en essayer un autre, à l'inverse du parcours en largeur.5 Pour chaque sommet, on le marque, puis on prend le premier voisin non marqué, et ainsi de suite jusqu'à un sommet sans voisin à visiter ; on revient alors au sommet précédent.5

Comparer, choisir, utiliser

Largeur et profondeur côte à côte
CritèreLargeur (BFS)Profondeur (DFS)
StructureFilePile ou récursivité
ExplorationPar couches autour de la sourceUn chemin jusqu'au cul-de-sac, puis retour
Ordre sur le graphe fil rougeA, B, C, D, E, F, GA, B, D, E, F, C, G
Usage typiqueDistances, plus courts cheminsExistence de chemin, labyrinthe
Largeur et profondeur côte à côte · Les deux parcours visitent les mêmes sommets accessibles, dans un ordre différent.

Le parcours en largeur découvre le graphe par couches successives ; le parcours en profondeur le découvre en suivant un chemin le plus loin possible. Les deux visitent exactement les mêmes sommets : ceux qui sont accessibles depuis la source. Pour le parcours en profondeur, ces sommets sont précisément ceux que l'algorithme a marqués, qu'il s'agisse d'un graphe orienté ou non orienté.5 Le parcours en largeur atteint lui aussi tous les sommets accessibles depuis la source.4

Sur un graphe non orienté, la propriété d'accessibilité sert à calculer les composantes connexes.5 Le parcours en largeur permet aussi de tester si un tel graphe est connexe et d'en obtenir les composantes connexes, avec un coût linéaire par rapport à la taille du graphe.4

La méthode est la suivante. On part d'un sommet quelconque et on lance un parcours : tous les sommets marqués forment une première composante. S'il reste des sommets non marqués, on en choisit un et on relance un parcours depuis lui, en gardant les marques précédentes : on obtient la deuxième composante, et ainsi de suite. Le graphe est connexe si un seul parcours depuis un sommet quelconque a marqué tous les sommets.

Réussir les questions de parcours au bac

Exercices corrigés

Exercice 1 Dérouler les deux parcours à la main

★☆☆Environ 10 min

On considère le graphe non orienté suivant, donné par ses listes de voisins rangés dans l'ordre alphabétique (le sommet S est la source) :

  • S : A, B
  • A : C, S
  • B : C, D, S
  • C : A, B, E
  • D : B
  • E : C
  1. Donne l'ordre de visite d'un parcours en largeur depuis S.
  2. Donne l'ordre de visite d'un parcours en profondeur depuis S.
  3. Quelle est la distance de S à E ?
Indice 1

Pour la largeur, tiens à jour le contenu de la file après chaque sommet retiré.

Indice 2

Pour la profondeur, avance toujours vers le premier voisin non visité dans l'ordre alphabétique, et reviens en arrière seulement en cas de cul-de-sac.

Voir la correction pas à pas
  1. Largeur : la file contient S. On retire S et on ajoute A et B : file A, B.

  2. On retire A : son voisin C est nouveau, file B, C. On retire B : C est déjà marqué, D est nouveau, file C, D.

  3. On retire C : E est nouveau, file D, E. On retire D, puis E. Ordre en largeur : S, A, B, C, D, E.

  4. Profondeur : on visite S, puis son premier voisin A, puis le premier voisin non visité de A, c'est-à-dire C.

  5. Depuis C, A est vu et B est nouveau : on visite B. Depuis B, C et S sont vus, D est nouveau : on visite D, cul-de-sac, retour à B, puis à C.

  6. Depuis C, le voisin E est nouveau : on le visite. Ordre en profondeur : S, A, C, B, D, E.

  7. Distance de S à E : E est découvert via C, lui-même découvert via A, découvert depuis S. Le chemin S, A, C, E compte 4 sommets donc 3 arêtes, et aucun chemin plus court n'existe puisque E n'est voisin que de C, qui est à distance 2.

Les deux ordres diffèrent dès le troisième sommet : en largeur, B (voisin de S) passe avant C ; en profondeur, C est atteint par A avant que B soit visité. La distance, elle, se lit sur le parcours en largeur : E est découvert au troisième « cercle » autour de S.

Exercice 2 Compter les composantes connexes

★★☆Environ 10 min

Voici un graphe non orienté, avec les voisins de chaque sommet :

  • 1 : 2, 3
  • 2 : 1, 4
  • 3 : 1, 4
  • 4 : 2, 3, 5
  • 5 : 4
  • 6 : 7
  • 7 : 6
  1. Lance un parcours en profondeur depuis 1. Quels sommets sont marqués à la fin ?
  2. Ce graphe est-il connexe ? Justifie.
  3. Combien de composantes connexes compte-t-il ?
Indice 1

Les sommets marqués à la fin d'un parcours sont exactement ceux accessibles depuis la source.

Indice 2

Relance un parcours depuis un sommet non marqué, en gardant les marques précédentes.

Voir la correction pas à pas
  1. On visite 1, puis 2 (premier voisin), puis 4 (voisin de 2).

  2. Depuis 4, 2 est vu et 3 est nouveau : on visite 3. Les voisins de 3, 1 et 4, sont vus : retour à 4.

  3. Depuis 4, le voisin 5 est nouveau : on le visite. Plus rien à explorer. Les sommets marqués sont 1, 2, 4, 3, 5 (dans cet ordre).

  4. Les sommets 6 et 7 ne sont pas marqués : aucun chemin ne les relie à 1. Le graphe n'est donc pas connexe.

  5. On relance un parcours depuis 6 en gardant les marques : il atteint 7 et s'arrête. Cela donne une deuxième composante, {6, 7}.

  6. Tous les sommets sont désormais marqués : il y a 2 composantes connexes, {1, 2, 3, 4, 5} et {6, 7}.

Chaque nouveau lancement de parcours depuis un sommet non marqué correspond à une nouvelle composante. C'est exactement ce que compte la fonction nb_composantes du cours.

Exercice 3 Écrire une fonction d'accessibilité

★★★Environ 15 min

On représente un graphe par un dictionnaire d'adjacence, comme dans le cours.

  1. Écris une fonction existe_chemin(graphe, depart, arrivee) qui renvoie True s'il existe un chemin de depart à arrivee, et False sinon. Tu peux choisir le parcours de ton choix.
  2. Pourquoi ta fonction se termine-t-elle même si le graphe contient un cycle ?
  3. Sur le graphe de l'exercice 2, que renvoient existe_chemin(g, 3, 5) et existe_chemin(g, 3, 6) ?
Indice 1

Un sommet est accessible depuis depart s'il est marqué à la fin d'un parcours lancé depuis depart.

Indice 2

Tu peux t'arrêter dès que tu rencontres arrivee.

Voir la correction pas à pas
  1. On choisit un parcours en largeur avec une file et un ensemble vus, en partant de depart.

  2. On écrit : def existe_chemin(graphe, depart, arrivee): puis vus = {depart} et file = deque([depart]).

  3. Dans la boucle while file, on retire s en tête ; si s == arrivee, on renvoie True.

  4. Pour chaque voisin t de s non présent dans vus, on l'ajoute à vus et à la file.

  5. Si la boucle se termine sans avoir rencontré arrivee, on renvoie False.

  6. Terminaison : chaque sommet entre au plus une fois dans la file grâce à vus, et le graphe a un nombre fini de sommets, donc la file finit par se vider, cycle ou non.

  7. Résultats : existe_chemin(g, 3, 5) renvoie True (3, 4, 5) et existe_chemin(g, 3, 6) renvoie False, car 6 n'est pas dans la composante de 3.

Une fonction d'accessibilité est un parcours dont on interroge le marquage. La preuve de terminaison repose toujours sur le même argument : un ensemble fini de sommets et un marquage qui empêche de les ajouter deux fois.

Quiz

8 questions · correction immédiate · ton score reste sur ton appareil.

  1. Quelle structure de données est utilisée par le parcours en largeur d'un graphe ?

  2. Avec le graphe fil rouge du cours (voisins rangés dans l'ordre alphabétique), quel est l'ordre de visite d'un parcours en profondeur depuis A ?

  3. Avec le même graphe, quel est l'ordre de visite d'un parcours en largeur depuis A ?

  4. Sur le graphe fil rouge, quelle est la distance (en nombre d'arêtes) de A à G ?

  5. Le parcours en largeur permet de calculer les distances depuis un sommet source dans un graphe non pondéré.

  6. Si on n'utilise aucun marquage des sommets visités, un parcours sur un graphe contenant un cycle peut ne jamais se terminer.

  7. Que faut-il changer dans l'algorithme du parcours en largeur pour obtenir un parcours en profondeur ?

  8. Un parcours en profondeur lancé depuis le sommet s d'un graphe non connexe visite tous les sommets du graphe.

Les questions qu'on se pose

Faut-il toujours marquer les sommets visités ?

Oui, dès que le graphe peut contenir un cycle. Le marquage évite d'explorer plusieurs fois le même sommet.4 Dans un arbre, il n'y a pas de cycle et le marquage n'est pas nécessaire.4 Dans le doute, marque : cela ne coûte presque rien et protège d'une boucle infinie.

Quand préférer le parcours en largeur au parcours en profondeur ?

Choisis la largeur quand la question porte sur une distance ou un plus court chemin en nombre d'arêtes, car les sommets y sont explorés par distance croissante à la source.4 Choisis la profondeur quand tu veux simplement savoir si un chemin existe ou explorer à fond, notamment en récursif, car son écriture est très naturelle.5 Pour l'accessibilité et les composantes connexes, les deux conviennent.

Pourquoi mon parcours en profondeur donne-t-il un ordre différent de celui du corrigé ?

L'ordre de visite dépend de l'ordre dans lequel les voisins sont examinés. Si le corrigé suit l'ordre alphabétique et que tu suis un autre ordre, tu obtiens un parcours valide mais différent. Relis l'énoncé pour repérer la consigne, et vérifie aussi que tu reviens bien au dernier sommet qui offrait encore un chemin, et pas au premier.5

Quelle est la différence entre la version récursive et la version avec pile du parcours en profondeur ?

Elles visitent les sommets dans le même ordre si tu empiles les voisins en ordre inverse. La version récursive laisse Python gérer la pile des appels ; la version itérative gère la pile à la main. Le parcours en profondeur se décrit naturellement de manière récursive,5 mais l'itératif évite l'erreur de dépassement de profondeur sur de très grands graphes.

Qu'est-ce qui tombe au bac sur ce chapitre ?

On te demande surtout de dérouler un parcours à la main sur un petit graphe (ordre de visite, contenu de la file ou de la pile), de compléter ou de corriger un programme Python, et d'utiliser un parcours pour répondre à une question : un chemin existe-t-il, quelle est la distance, combien de composantes connexes ? Entraîne-toi à faire le tableau « sommet traité, file ou pile, sommets marqués ».

Sources

Programme visé : Numérique et sciences informatiques - spécialité Terminale - Algorithmique et graphes · Ministère de l'Éducation nationale

  1. Numérique et sciences informatiques - spécialité Terminale - Algorithmique et graphes, Ministère de l'Éducation nationale. Consulté le 7 novembre 2026.
  2. Ressources accompagnement NSI - Récursivité et structures de données, Éduscol. Consulté le 7 novembre 2026.
  3. Algorithmique des graphes - Cours avancé, CNRS - LIRIS. Consulté le 7 novembre 2026.
  4. Algorithme de parcours en largeur, Wikipédia. Consulté le 7 novembre 2026.
  5. Algorithme de parcours en profondeur, Wikipédia. Consulté le 7 novembre 2026.

Les numéros dans le texte renvoient à ces sources. Une source qui ne dit pas ce qu'on lui fait dire ? Signale-le.

Signaler une erreur sur cette page

Je suis en…

Primaire

  • CP Bientôt
  • CE1 Bientôt
  • CE2 Bientôt
  • CM1 Bientôt
  • CM2 Bientôt

Collège

Lycée

Supérieur

  • BTS Bientôt
  • BUT Bientôt
  • Licence Bientôt
  • Prépas Bientôt

Sur cette page