Aller au contenu

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

Graphes : représentations, exercices corrigés de Terminale NSI

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

L'essentiel

  • Un graphe se représente par une matrice d'adjacence (tableau de 0 et de 1) ou par des listes de voisins (dictionnaire).
  • Pour un graphe non orienté, la matrice est symétrique ; pour un graphe orienté, elle ne l'est en général pas.
  • Un graphe pondéré associe un nombre (le poids) à chaque arête ; la matrice contient alors les poids.
  • Le dessin d'un graphe n'est pas unique : on raisonne sur sa structure, pas sur sa figure.
  • Matrice : lecture rapide d'une arête mais beaucoup de place ; listes : économes quand il y a peu d'arêtes.

Comment utiliser ces exercices

Ces exercices portent sur les représentations d'un graphe : le dessin, la matrice d'adjacence et les listes de voisins. Ils sont classés du plus simple au plus délicat. Cherche d'abord seul, avec une feuille, puis ouvre les indices un par un, et seulement ensuite la correction.

Les exercices

Exercice 1 Construire une matrice d'adjacence

★☆☆Environ 6 min

Un graphe non orienté a pour sommets AA, BB, CC, DD (dans cet ordre) et pour arêtes A−BA-B, A−CA-C, B−CB-C et C−DC-D.

  1. Écris sa matrice d'adjacence.
  2. Combien de cases de cette matrice valent 11 ?
Indice 1

Une arête A−BA-B donne un 11 à deux endroits : ligne AA colonne BB, et ligne BB colonne AA.

Indice 2

Aucun sommet n'a d'arête vers lui-même : la diagonale est remplie de 00.

Voir la correction pas à pas
  1. On prépare un tableau 4×44\times 4 dont les lignes et colonnes sont ordonnées A,B,C,DA,B,C,D.

  2. On place les 11 pour A−BA-B : cases (A,B)(A,B) et (B,A)(B,A). Pour A−CA-C : (A,C)(A,C) et (C,A)(C,A). Pour B−CB-C : (B,C)(B,C) et (C,B)(C,B). Pour C−DC-D : (C,D)(C,D) et (D,C)(D,C).

  3. On complète par des 00. La matrice est (0110101011010010)\begin{pmatrix}0&1&1&0\\1&0&1&0\\1&1&0&1\\0&0&1&0\end{pmatrix}.

  4. On compte les 11 : 22 par arête, donc 2×4=82\times 4 = 8.

La matrice est symétrique, comme toujours pour un graphe non orienté, et le nombre de 11 vaut deux fois le nombre d'arêtes.

Exercice 2 Passer à des listes de voisins

★☆☆Environ 5 min

On reprend le graphe de l'exercice précédent (arêtes A−BA-B, A−CA-C, B−CB-C, C−DC-D).

  1. Écris-le sous forme de dictionnaire Python associant à chaque sommet la liste de ses voisins.
  2. Quel est le nombre de voisins du sommet CC ?
Indice 1

Le dictionnaire commence par {"A": ["B", "C"], ...}.

Indice 2

Compte les arêtes qui touchent CC.

Voir la correction pas à pas
  1. Voisins de AA : BB et CC.

  2. Voisins de BB : AA et CC. Voisins de CC : AA, BB et DD. Voisins de DD : CC.

  3. Le dictionnaire est {"A": ["B","C"], "B": ["A","C"], "C": ["A","B","D"], "D": ["C"]}.

  4. Le sommet CC a 33 voisins, c'est len(g["C"]).

Chaque arête apparaît deux fois dans ce dictionnaire, une fois dans la liste de chacune de ses extrémités.

Exercice 3 Lire une matrice : nombre d'arêtes

★☆☆Environ 7 min

Un graphe non orienté à cinq sommets numérotés de 00 à 44 a pour matrice d'adjacence

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

Combien ce graphe a-t-il d'arêtes ?

Indice 1

Additionne les 11 ligne par ligne : chaque ligne donne le nombre de voisins du sommet.

Indice 2

Chaque arête est comptée deux fois dans la matrice.

Voir la correction pas à pas
  1. Les lignes contiennent respectivement 22, 33, 33, 22 et 22 cases à 11.

  2. La somme des cases vaut 2+3+3+2+2=122+3+3+2+2=12.

  3. Chaque arête étant comptée une fois par extrémité, on divise par 22 : 12/2=612/2=6.

On peut vérifier en listant les arêtes : 0−10-1, 0−20-2, 1−21-2, 1−31-3, 2−42-4, 3−43-4. Cela fait bien six arêtes.

Exercice 4 Un graphe orienté

★★☆Environ 9 min

Un graphe orienté a pour sommets 0,1,2,30,1,2,3 et pour arcs 0→10\to1, 0→20\to2, 1→21\to2, 2→02\to0, 2→32\to3, 3→13\to1.

  1. Écris sa matrice d'adjacence (la case de la ligne ii, colonne jj vaut 11 si l'arc i→ji\to j existe).
  2. Cette matrice est-elle symétrique ?
  3. Combien d'arcs partent du sommet 22 ?
Indice 1

Un arc 0→10\to1 ne donne qu'un seul 11 : ligne 00, colonne 11.

Indice 2

Le nombre d'arcs qui partent du sommet 22 se lit sur la ligne 22.

Voir la correction pas à pas
  1. Ligne 00 : arcs vers 11 et 22, soit (0,1,1,0)(0,1,1,0). Ligne 11 : arc vers 22, soit (0,0,1,0)(0,0,1,0).

  2. Ligne 22 : arcs vers 00 et 33, soit (1,0,0,1)(1,0,0,1). Ligne 33 : arc vers 11, soit (0,1,0,0)(0,1,0,0).

  3. Pas de symétrie : la case (0,1)(0,1) vaut 11 mais la case (1,0)(1,0) vaut 00.

  4. Sur la ligne 22, il y a deux 11 : deux arcs partent du sommet 22.

Dans un graphe orienté, la ligne d'un sommet décrit les arcs qui en partent et la colonne ceux qui y arrivent. C'est pourquoi la matrice n'est plus symétrique.

Exercice 5 Du code à la structure du graphe

★★☆Environ 8 min

Un programme définit le graphe suivant :

g = {"A": ["B", "D"],
     "B": ["A", "C", "D"],
     "C": ["B"],
     "D": ["A", "B"]}

def nb_aretes(g):
    return sum(len(v) for v in g.values()) // 2
  1. Que renvoie nb_aretes(g) ?
  2. Pourquoi divise-t-on par 22 ? Pourquoi serait-ce faux pour un graphe orienté ?
Indice 1

Calcule d'abord len de chaque liste.

Indice 2

Pense à la manière dont une arête apparaît dans le dictionnaire.

Voir la correction pas à pas
  1. Les longueurs des listes sont 22, 33, 11 et 22 ; leur somme vaut 88.

  2. Chaque arête non orientée est écrite deux fois (dans la liste de chaque extrémité), donc 8//2=48//2=4.

  3. Les arêtes sont A−BA-B, A−DA-D, B−CB-C, B−DB-D : on en compte bien quatre.

  4. Dans un graphe orienté, un arc u→vu\to vn'est écrit qu'une fois, dans la liste de uu : il ne faut alors pas diviser.

Avant d'utiliser une formule de comptage, demande-toi toujours si le graphe est orienté ou non.

Exercice 6 Matrice de poids et coût d'un chemin

★★☆Environ 10 min

Un graphe pondéré non orienté a pour sommets A,B,C,DA,B,C,D et pour arêtes pondérées : A−BA-B de poids 44, A−CA-C de poids 22, B−CB-C de poids 11, B−DB-D de poids 55, C−DC-D de poids 77.

  1. Écris la matrice des poids, en mettant 00 quand il n'y a pas d'arête.
  2. Quel est le coût total du chemin A→C→B→DA\to C\to B\to D ?
  3. Ce chemin est-il plus court que le chemin direct A→B→DA\to B\to D ?
Indice 1

Dans un graphe pondéré, le poids d'une arête peut représenter une distance ou un coût 3. On le place dans la matrice à la place du 11.

Indice 2

Le coût d'un chemin est la somme des poids de ses arêtes.

Voir la correction pas à pas
  1. La matrice des poids, dans l'ordre A,B,C,DA,B,C,D, est (0420401521070570)\begin{pmatrix}0&4&2&0\\4&0&1&5\\2&1&0&7\\0&5&7&0\end{pmatrix}.

  2. Le chemin A→C→B→DA\to C\to B\to D utilise les arêtes de poids 22, 11 et 55 : coût 2+1+5=82+1+5=8.

  3. Le chemin A→B→DA\to B\to D coûte 4+5=94+5=9.

  4. Comme 8<98<9, le chemin qui passe par CC est plus économique, bien qu'il compte plus d'arêtes.

Le nombre d'arêtes d'un chemin ne dit rien de son coût : il faut additionner les poids.

Exercice 7 Choisir la représentation : coût mémoire

★★★Environ 10 min

Un graphe non orienté a 100100 sommets et 150150 arêtes.

  1. Combien de cases contient sa matrice d'adjacence ?
  2. Combien de sommets au total apparaissent dans l'ensemble de ses listes de voisins ?
  3. Quelle représentation choisir pour ce graphe, et pourquoi ?
Indice 1

La matrice a une ligne et une colonne par sommet.

Indice 2

Chaque arête est écrite deux fois dans les listes de voisins.

Voir la correction pas à pas
  1. La matrice est carrée de côté 100100 : 100×100=10 000100\times100=10\,000 cases.

  2. Chaque arête figure dans la liste de chacune de ses deux extrémités : 2×150=3002\times150=300 entrées au total.

  3. 300300 est bien inférieur à 10 00010\,000 : presque toutes les cases de la matrice contiendraient un 00.

  4. On choisit donc les listes de voisins, plus économes quand il y a peu d'arêtes. La matrice garde l'avantage de répondre immédiatement à la question « ces deux sommets sont-ils reliés ? ».

Le choix dépend de la densité du graphe et de l'usage : peu d'arêtes, on préfère les listes ; test fréquent d'une arête précise, la matrice est pratique.

Exercice 8 Nombre maximal d'arêtes

★★★Environ 10 min

On considère des graphes non orientés à 55 sommets, sans arête reliant un sommet à lui-même et sans arête multiple.

  1. Combien d'arêtes au maximum un tel graphe peut-il avoir ?
  2. Quel serait le nombre maximal d'arcs pour un graphe orienté de 55 sommets, sans boucle et avec au plus un arc de uu vers vv ?
  3. Comment le voit-on sur la matrice d'adjacence ?
Indice 1

Une arête relie deux sommets distincts : compte les paires de sommets.

Indice 2

Dans un graphe orienté, l'arc u→vu\to v et l'arc v→uv\to u sont deux arcs différents.

Voir la correction pas à pas
  1. Le nombre de paires de sommets distincts parmi 55 est 5×42=10\dfrac{5\times4}{2}=10.

  2. Pour un graphe orienté, chaque sommet peut émettre un arc vers chacun des 44 autres : 5×4=205\times4=20 arcs au maximum.

  3. Sur la matrice, la diagonale reste à 00 (pas de boucle). Il reste 25−5=2025-5=20 cases utilisables, dont la moitié suffit au cas non orienté, par symétrie : 1010 arêtes.

Un graphe qui atteint ce maximum est dit complet. La matrice d'un graphe complet non orienté ne contient que des 11 hors de la diagonale.

Les questions qu'on se pose

Deux matrices différentes peuvent-elles représenter le même graphe ?

Oui. La matrice dépend de l'ordre dans lequel on étiquette les sommets 3. Si tu échanges l'étiquette de deux sommets, deux lignes et deux colonnes de la matrice sont échangées, mais le graphe reste le même. De même, plusieurs dessins peuvent représenter un seul graphe 1. Pour comparer deux représentations, fixe d'abord l'ordre des sommets.

Au bac, faut-il préférer la matrice ou les listes de voisins ?

Le sujet l'indique en général : on te demande de lire ou d'écrire l'une ou l'autre. Quand tu as le choix, retiens la règle de l'exercice sur le coût mémoire : peu d'arêtes, les listes de voisins (un dictionnaire Python) ; test fréquent de la présence d'une arête, la matrice. Dans tous les cas, précise l'ordre des sommets et si le graphe est orienté ou non.

Comment vérifier rapidement une matrice d'adjacence que je viens d'écrire ?

Trois contrôles. Pour un graphe non orienté, la matrice doit être symétrique. La diagonale doit être nulle s'il n'y a pas de boucle. La somme de toutes les cases doit valoir deux fois le nombre d'arêtes (le nombre d'arcs pour un graphe orienté).

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