Aller au contenu

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

Graphes : représentations, cours de Terminale NSI

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

L'essentiel

  • Un graphe est un ensemble de sommets reliés par des arêtes (non orienté) ou des arcs (orienté) ; son dessin n'est pas unique 1.
  • La matrice d'adjacence est un tableau carré de 0 et de 1 : la case (i, j) vaut 1 s'il existe une liaison de i vers j. Elle est symétrique si le graphe est non orienté.
  • La liste d'adjacence (ou le dictionnaire de listes) range, pour chaque sommet, la liste de ses voisins 3.
  • Matrice : test d'une arête immédiat mais mémoire en n². Listes : mémoire proportionnelle aux sommets + arêtes, idéale pour les graphes peu denses.
  • Dans un graphe pondéré, chaque arête porte un poids (distance, coût, capacité) 3 : on le met dans la matrice ou dans un dictionnaire de dictionnaires.

Pourquoi représenter un graphe ?

Un plan de métro, un réseau d'amis, une molécule : dans chaque cas, on a des objets et des liens entre eux. Les graphes sont l'outil mathématique qui modélise cela. Les molécules (atomes et liaisons), les réseaux sociaux et les réseaux de transport figurent parmi les exemples classiques 3. Les graphes servent aussi à la gestion du trafic ou aux systèmes de recommandation 3.

Dans ce cours, la question n'est pas « qu'est-ce qu'un graphe ? » au sens théorique, mais : comment le ranger dans la mémoire d'un programme ? Un ordinateur ne voit pas un dessin. Il lui faut des listes, des tableaux, des dictionnaires. Tu as déjà manipulé ces structures avec les listes chaînées, les piles, les files, les dictionnaires et les arbres. Un arbre est d'ailleurs un cas particulier de graphe : tu vas donc retrouver des idées familières.

À la fin du chapitre, tu sauras :

  • décrire un graphe par ses sommets et ses arêtes ou arcs ;
  • construire sa matrice d'adjacence et sa liste d'adjacence ;
  • les écrire en Python (liste de listes, dictionnaire) ;
  • passer d'une représentation à l'autre ;
  • choisir la représentation adaptée à un problème, en justifiant par la mémoire et le temps de réponse.
Représenter un grapheCarte mentale avec au centre Graphe et quatre branches : vocabulaire, matrice, listes, choix.SommetArête / arcPoidsVocabulaireCarré n×n0 ou 1Symétrique si non orientéMatriceVoisinsDictionnairePeu de mémoireListesDensitéOpération fréquenteChoixGraphe

Graphe

  • Vocabulaire
    • Sommet
    • Arête / arc
    • Poids
  • Matrice
    • Carré n×n
    • 0 ou 1
    • Symétrique si non orienté
  • Listes
    • Voisins
    • Dictionnaire
    • Peu de mémoire
  • Choix
    • Densité
    • Opération fréquente
Représenter un graphe

Vocabulaire : graphes orientés et non orientés

Un graphe exemple pour tout le chapitre

Nous utiliserons un petit graphe non orienté à 5 sommets numérotés de 0 à 4. Ses arêtes sont :

  • 0 — 1
  • 0 — 2
  • 1 — 2
  • 2 — 3
  • 3 — 4

Le sommet 2 est relié à trois autres sommets, il a donc pour degré 3. Le sommet 4 n'a qu'un voisin (le 3), son degré est 1. Les sommets 0, 1, 2 forment un triangle, et la chaîne 2 — 3 — 4 y est accrochée.

La matrice d'adjacence

La liste d'adjacence et le dictionnaire

Lire les deux représentations : opérations de base

Voyons ce que coûte chaque question simple, selon la représentation. On note nn le nombre de sommets et mm le nombre d'arêtes (ou d'arcs).

Démonstration · Pourquoi la somme des degrés vaut 2m

Chaque arête relie deux sommets. En additionnant les degrés de tous les sommets, on compte, pour chaque arête, une unité à chacune de ses deux extrémités. Chaque arête contribue donc exactement 2 à la somme. On obtient ∑sdeg⁡(s)=2m\sum_{s} \deg(s) = 2m. En particulier, cette somme est toujours paire : un graphe non orienté ne peut pas avoir un nombre impair de sommets de degré impair.

Passer d'une représentation à l'autre

Choisir la bonne représentation

Aucune représentation n'est meilleure dans tous les cas. Le choix dépend de la densité du graphe, c'est-à-dire du nombre d'arêtes par rapport au maximum possible, et de l'opération la plus fréquente. Un graphe de réseau routier est peu dense : chaque carrefour est relié à quelques autres seulement, alors qu'il y a des milliers de carrefours. Un graphe où presque tous les sommets sont reliés entre eux est dense.

Matrice ou liste d'adjacence
CritèreMatrice d'adjacenceListe / dictionnaire
Mémoiren² casesn + m éléments environ
Arête a–b existe ?Un accès directParcours de la liste de a
Voisins de aParcours d'une ligne de n casesListe déjà prête
Graphe adaptéDensePeu dense
PoidsDans la caseDictionnaire de dictionnaires
Matrice ou liste d'adjacence
Choisir sa représentationQuatre étapes pour décider entre matrice et listes d'adjacence.1EstimerCompte n sommets et m arêtes.2DensitéCompare m à n² : graphe dense ou non ?3OpérationTest d'arête ou parcours de voisins ?4DéciderDense ou tests : matrice. Sinon : listes.
  1. EstimerCompte n sommets et m arêtes.
  2. DensitéCompare m à n² : graphe dense ou non ?
  3. OpérationTest d'arête ou parcours de voisins ?
  4. DéciderDense ou tests : matrice. Sinon : listes.
Choisir sa représentation

Erreurs fréquentes et conseils pour le Bac

« À bien des égards, les graphes sont la principale modalité de données que nous recevons de la nature. » (Petar Veličković, 2023) 3

Pourquoi les graphes sont partout

Exercices corrigés

Exercice 1 Lire une matrice d'adjacence

★☆☆Environ 8 min

Un graphe non orienté a 4 sommets numérotés de 0 à 3. Sa matrice d'adjacence est :

M=(0110101111010110)M = \begin{pmatrix} 0 & 1 & 1 & 0 \\ 1 & 0 & 1 & 1 \\ 1 & 1 & 0 & 1 \\ 0 & 1 & 1 & 0 \end{pmatrix}

  1. Donne la liste d'adjacence de chaque sommet.
  2. Quel est le degré de chaque sommet ?
  3. Combien ce graphe compte-t-il d'arêtes ?
Indice 1

La ligne i de la matrice contient un 1 pour chaque voisin de i.

Indice 2

Chaque arête apparaît deux fois dans la matrice.

Voir la correction pas à pas
  1. Ligne 0 : des 1 aux colonnes 1 et 2, donc voisins de 0 : [1, 2].

  2. Ligne 1 : colonnes 0, 2, 3, donc [0, 2, 3]. Ligne 2 : colonnes 0, 1, 3, donc [0, 1, 3]. Ligne 3 : colonnes 1 et 2, donc [1, 2].

  3. Degrés : 2, 3, 3, 2 (nombre de voisins de chaque sommet).

  4. La somme des degrés vaut 2 + 3 + 3 + 2 = 10. Chaque arête étant comptée deux fois, il y a 10 / 2 = 5 arêtes.

Le graphe compte 5 arêtes. Le contrôle de symétrie de la matrice confirme qu'il s'agit bien d'un graphe non orienté.

Exercice 2 Compter les arcs d'un graphe orienté

★★☆Environ 10 min

Un graphe orienté a 5 sommets (0 à 4). On donne la liste des successeurs de chaque sommet :

  • 0 : [1, 2]
  • 1 : [2]
  • 2 : [0, 3, 4]
  • 3 : []
  • 4 : [3, 1]
  1. Combien d'arcs ce graphe possède-t-il ?
  2. Quel est le degré entrant du sommet 3 ?
  3. Écris la ligne 4 de la matrice d'adjacence.
Indice 1

Dans un graphe orienté, chaque arc n'apparaît qu'une fois dans les listes de successeurs.

Indice 2

Le degré entrant de 3 est le nombre de listes qui contiennent 3.

Voir la correction pas à pas
  1. Nombre d'arcs : on additionne les longueurs des listes, 2 + 1 + 3 + 0 + 2 = 8.

  2. Degré entrant de 3 : le sommet 3 apparaît dans la liste de 2 et dans celle de 4, soit 2 arcs entrants.

  3. Ligne 4 : les successeurs de 4 sont 3 et 1. On met un 1 aux colonnes 1 et 3, d'où [0, 1, 0, 1, 0].

Le graphe compte 8 arcs. On ne divise pas par 2, puisqu'un arc n'a qu'un sens.

Exercice 3 Écrire une fonction de conversion

★★★Environ 15 min

On représente un graphe non orienté par un dictionnaire G dont les clés sont des sommets nommés et les valeurs des listes de voisins.

  1. Écris une fonction degre(G, s) qui renvoie le degré du sommet s.
  2. Écris une fonction est_coherent(G) qui renvoie True si, pour chaque b voisin de a, a figure aussi dans la liste de b.
  3. Explique pourquoi un sommet isolé doit apparaître comme clé du dictionnaire.
Indice 1

Le degré est la longueur de la liste associée à la clé.

Indice 2

Parcours toutes les clés a, puis tous les voisins b de a, et teste a in G[b].

Voir la correction pas à pas
  1. Question 1 : def degre(G, s): return len(G[s]).

  2. Question 2 : on parcourt chaque couple (a, b) avec b dans G[a] ; si a not in G[b], on renvoie False ; à la fin de la double boucle, on renvoie True.

  3. Version complète : def est_coherent(G): puis for a in G: puis for b in G[a]: puis if a not in G[b]: return False, enfin return True.

  4. Question 3 : sans clé pour un sommet isolé, le sommet n'existe pas dans la structure ; le nombre de sommets, len(G), serait faux, et G[s] provoquerait une erreur.

Cette vérification de cohérence est utile après avoir construit un graphe à la main : elle détecte les arêtes inscrites une seule fois.

Quiz

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

  1. Dans un graphe orienté, que représente un coefficient M[i][j]=1M[i][j] = 1 de la matrice d'adjacence ?

  2. Quelle propriété caractérise la matrice d'adjacence d'un graphe non orienté ?

  3. Un graphe non orienté a 6 sommets et 7 arêtes. Combien de coefficients valent 1 dans sa matrice d'adjacence (sans boucle) ?

  4. Pour un graphe de 20 000 sommets où chacun a en moyenne 5 voisins, quelle représentation est la plus économe en mémoire ?

  5. Deux dessins différents d'un même graphe, avec des arêtes qui se croisent dans l'un et pas dans l'autre, représentent forcément deux graphes différents.

  6. On échange les numéros de deux sommets d'un graphe. Que devient sa matrice d'adjacence ?

  7. Quelle instruction crée correctement une matrice n×nn \times n de zéros en Python ?

  8. Quelles affirmations sont vraies pour un graphe non orienté, représenté par un dictionnaire de listes de voisins ?

    Plusieurs réponses possibles.

Les questions qu'on se pose

Faut-il retenir la matrice ou la liste d'adjacence pour le Bac ?

Les deux. Le programme attend que tu saches passer de l'une à l'autre et justifier un choix. Dans les sujets, on te donne souvent un graphe sous forme de dictionnaire de listes ou de matrice, et on te demande d'écrire une fonction qui le parcourt ou le convertit. Retiens aussi les ordres de grandeur de mémoire : n2n^2 pour la matrice, de l'ordre de n+mn + m pour les listes.

Comment savoir si un graphe est dense ou peu dense ?

Compare le nombre d'arêtes mm au maximum possible. Dans un graphe non orienté sans boucle, ce maximum vaut n(n−1)/2n(n-1)/2. Si mm est proche de ce maximum, le graphe est dense ; s'il est de l'ordre de nn, il est peu dense. Les réseaux routiers ou sociaux sont en général peu denses.

Un arbre est-il un graphe ?

Oui. Un arbre est un graphe particulier, sans cycle et dont tous les sommets sont reliés entre eux. On peut donc le représenter avec une liste d'adjacence ou une matrice, même si, pour un arbre binaire, une structure dédiée (nœud avec fils gauche et fils droit) est souvent plus simple.

Que mettre dans la matrice pour un graphe pondéré ?

On y place le poids de l'arête à la place du 1. Comme 0 peut être un poids valide, on marque l'absence de liaison par une valeur spéciale, None ou float('inf') selon l'usage. Avec un dictionnaire, on écrit G['A']['B'] = poids.

Pourquoi un graphe non orienté est-il stocké avec chaque arête en double ?

Parce qu'une arête relie les deux sommets dans les deux sens. Pour pouvoir lire directement les voisins de n'importe quel sommet, on inscrit B chez A et A chez B. Le coût est un doublement du stockage, mais les parcours restent simples.

Sources

  1. Document officiel eduscol : Graphes (structures de données), Éduscol. Consulté le 7 novembre 2026.
  2. Représentation graphique, Wikipédia. Consulté le 7 novembre 2026.
  3. Théorie des graphes, 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