<?xml version="1.0" encoding="UTF-8"?>
<quiz>
<question type="category">
  <category>
    <text>$course$/QCM de NSI/Terminale/Graphes</text>
  </category>
  <info format="html">
    <text><![CDATA[<p>Définition d'un graphe (sommets, arêtes), graphes orientés<br/>
et non orientés, pondérés, représentations (matrice<br/>
d'adjacence, liste d'adjacence), parcours en largeur<br/>
et en profondeur, plus court chemin, applications.</p>]]></text>
  </info>
</question>

<question type="multichoice">
  <name>
    <text>Graphes — Q01 : Définition d'un graphe</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Qu'est-ce qu'un <strong>graphe</strong> en informatique ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Les graphes sont omniprésents : transport, réseaux<br/>
sociaux, web (pages reliées par hyperliens), réseaux<br/>
électriques, planification de tâches, recommandations.<br/>
Connaître les algorithmes de graphes est essentiel.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Un type d'arbre</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est plutôt l'inverse. Un arbre est un<br/>
cas particulier de graphe (acyclique connexe).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une représentation visuelle de données numériques (camembert, histogramme)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce serait un <strong>graphique</strong>. Un graphe en<br/>
informatique est une structure mathématique<br/>
différente.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Des sommets reliés par des arêtes</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : c'est la définition mathématique<br/>
standard. Un graphe modélise n'importe quelle<br/>
relation entre objets : réseau routier, réseau<br/>
social, dépendances de tâches, etc.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Un dictionnaire trié</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Un dictionnaire est une<br/>
structure associant des<br/>
clés à des valeurs, sans<br/>
rapport avec un ensemble<br/>
de sommets reliés par des<br/>
arêtes.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Graphes — Q02 : Graphe orienté</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quelle est la différence entre un graphe <strong>orienté</strong> et<br/>
un graphe <strong>non orienté</strong> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Cas typique : réseau routier (orienté si rues à sens<br/>
unique, non orienté si toutes en double sens). Le<br/>
web est orienté (un lien va d'une page à l'autre<br/>
sans symétrie).</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>L'orienté a des arêtes à sens, pas le non orienté</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : on parle d'<strong>arcs</strong> pour les<br/>
arêtes orientées. Exemple orienté : suivre<br/>
quelqu'un sur Twitter (asymétrique). Exemple non<br/>
orienté : amitié sur Facebook (symétrique).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Un graphe orienté n'a pas de cycle</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : un graphe orienté <strong>peut</strong> avoir des<br/>
cycles. Sans cycle, on parle de DAG (graphe<br/>
orienté acyclique).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Le graphe orienté contient plus de sommets</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucun rapport avec le nombre de sommets.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Un graphe non orienté est toujours plus rapide à parcourir</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la vitesse de parcours dépend du nombre<br/>
de sommets et arêtes, pas de l'orientation.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Graphes — Q03 : Graphe pondéré</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Qu'est-ce qu'un graphe <strong>pondéré</strong> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Un graphe peut être à la fois orienté ET pondéré<br/>
(cas d'un GPS, d'un réseau de transport, etc.).</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Un graphe avec beaucoup d'arêtes</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est plutôt un graphe <strong>dense</strong>. Aucun<br/>
rapport avec « pondéré ».</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Un graphe partagé entre plusieurs utilisateurs</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Le partage entre<br/>
utilisateurs relève d'un<br/>
aspect logiciel sans<br/>
rapport avec la<br/>
pondération des arêtes.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Un graphe trop lourd à stocker en mémoire</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : « pondéré » est un terme technique précis,<br/>
pas une métaphore.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Un graphe où chaque arête porte un poids</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : par exemple, un GPS représente<br/>
les routes par un graphe pondéré (poids = temps<br/>
de trajet). Les algorithmes de plus court chemin<br/>
(Dijkstra) exploitent ces poids.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Graphes — Q04 : Matrice d'adjacence</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Une <strong>matrice d'adjacence</strong> d'un graphe à $n$ sommets est :</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Pour un graphe non orienté, la matrice est<br/>
<strong>symétrique</strong> ($M[i][j] = M[j][i]$). Pour un<br/>
graphe orienté, elle peut ne pas l'être.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Une matrice $n \times n$ avec $M[i][j]=1$ si arête $i$-$j$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : c'est l'une des deux représentations<br/>
principales des graphes. Avantage : test<br/>
d'arête en $O(1)$. Inconvénient : consomme<br/>
$O(n^2)$ d'espace, même pour des graphes creux.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Un tableau $1 \times n$ contenant tous les degrés des sommets</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce serait un tableau de degrés, pas une<br/>
matrice d'adjacence.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Un arbre</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Un arbre est une<br/>
structure de données<br/>
spécifique, sans rapport<br/>
avec la représentation<br/>
d'un graphe par une<br/>
matrice.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Un dictionnaire de listes</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est plutôt une <strong>liste d'adjacence</strong>.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Graphes — Q05 : Liste d'adjacence</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Une <strong>liste d'adjacence</strong> d'un graphe consiste à :</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Choix entre matrice et liste : matrice pour graphes<br/>
<strong>denses</strong> (peu de zéros) ou si on a besoin de<br/>
tester très souvent l'existence d'une arête. Liste<br/>
pour graphes <strong>creux</strong> (cas le plus fréquent en<br/>
pratique).</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Stocker uniquement les sommets isolés du graphe entier</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : on stocke tous les sommets.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Trier les sommets par degré</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucun tri requis.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Numéroter les arêtes de $1$ à $m$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est plutôt une numérotation, pas une<br/>
liste d'adjacence.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Stocker pour chaque sommet la liste de ses voisins</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : pour le sommet $v$, on stocke la<br/>
liste de tous les sommets directement reliés à<br/>
lui. Plus efficace en mémoire que la matrice<br/>
d'adjacence pour les graphes <strong>creux</strong><br/>
(peu d'arêtes par sommet). Espace : $O(n + m)$<br/>
avec $m$ arêtes.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Graphes — Q06 : Parcours en largeur</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Le parcours en <strong>largeur</strong> d'un graphe :</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Application clé : trouver le plus court chemin<br/>
<strong>en nombre d'arêtes</strong> depuis un sommet de départ.<br/>
Aussi utilisé pour tester la connexité, calculer<br/>
les composantes connexes, etc.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Visite les voisins par niveaux successifs</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : c'est l'algorithme de référence<br/>
pour explorer un graphe en respectant la distance<br/>
en nombre d'arêtes. Implémentation : avec une<br/>
<strong>file</strong> (FIFO).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parcourt la branche la plus profonde d'abord</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est le parcours en <strong>profondeur</strong><br/>
(DFS), pas le parcours en largeur.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Trie les sommets par valeur</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucun tri par valeur.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Visite uniquement les feuilles</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : tous les sommets accessibles sont<br/>
visités.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Graphes — Q07 : Parcours en profondeur</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Le parcours en <strong>profondeur</strong> d'un graphe :</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Mémo : <strong>largeur = file = FIFO</strong> ; <strong>profondeur = pile = LIFO</strong>. Les deux parcours visitent tous les<br/>
sommets accessibles, mais dans un ordre différent.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Explore une branche à fond avant de revenir en arrière</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : implémentation typique avec une<br/>
<strong>pile</strong> (explicite ou implicite via la<br/>
récursivité). Le parcours en profondeur est<br/>
utile pour la détection de cycles, le tri<br/>
topologique, la recherche de composantes<br/>
fortement connexes, etc.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Trie les sommets par profondeur</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucun tri par profondeur.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Visite tous les voisins du sommet de départ avant d'aller plus loin</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est le parcours en <strong>largeur</strong>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Calcule la longueur totale du graphe</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucune notion de longueur globale.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Graphes — Q08 : Structure utilisée par parcours en largeur</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Pour implémenter un parcours en largeur, quelle structure<br/>
de données utilise-t-on naturellement ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>En Python : <code>from collections import deque ;<br/>
f = deque([depart])</code>. Avec <code>f.append(v)</code> pour enfiler<br/>
et <code>f.popleft()</code> pour défiler, en $O(1)$ chacun.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Un dictionnaire</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : un dictionnaire n'a pas la sémantique<br/>
d'ordre nécessaire.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une pile</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la pile correspond au parcours en<br/>
<strong>profondeur</strong>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Une file (FIFO)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : on enfile le sommet de départ,<br/>
puis tant que la file n'est pas vide on défile<br/>
un sommet, on visite, et on enfile ses voisins<br/>
non encore visités. C'est exactement le parcours en largeur.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Aucune structure</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : il faut bien stocker les sommets en<br/>
attente.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Graphes — Q09 : Structure utilisée par parcours en profondeur</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Le parcours en profondeur peut s'implémenter en utilisant :</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Récursivité = pile implicite. Itératif avec pile =<br/>
pile explicite. Les deux donnent le même résultat<br/>
(à l'ordre des voisins près). La version récursive<br/>
est souvent plus claire.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une file uniquement</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la file donne un parcours en largeur,<br/>
pas en profondeur.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Un graphe profondément imbriqué</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Cette description ne<br/>
correspond pas à une<br/>
structure standard<br/>
utilisée pour le<br/>
parcours d'un graphe.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Un arbre binaire</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : un arbre est une structure différente,<br/>
pas l'outil de parcours.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Une pile (ou la récursivité)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la récursivité utilise<br/>
implicitement la pile d'appels. La version<br/>
itérative utilise explicitement une pile (<code>list</code><br/>
avec <code>append</code> et <code>pop</code>).</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Graphes — Q10 : Plus court chemin</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Pour trouver le plus court chemin (en nombre d'arêtes)<br/>
entre deux sommets dans un graphe <strong>non pondéré</strong>, on<br/>
utilise :</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Pour graphe pondéré à poids <strong>positifs</strong> : Dijkstra<br/>
($O((n + m) \log n)$). Pour graphe avec poids<br/>
négatifs : Bellman-Ford ($O(nm)$). parcours en largeur s'utilise<br/>
quand toutes les arêtes ont un poids identique<br/>
(typiquement, $1$).</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Un tri topologique</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est utile pour les DAG, pas pour les<br/>
plus courts chemins.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Un parcours en largeur</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : le parcours en largeur visite les sommets par<br/>
ordre croissant de distance (en arêtes) depuis<br/>
le sommet de départ. Le premier moment où on<br/>
atteint le sommet d'arrivée donne la distance<br/>
minimale.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Un parcours en profondeur</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : parcours en profondeur ne donne pas le plus court chemin<br/>
en général. Il peut prendre une route longue.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>L'algorithme de Dijkstra</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : Dijkstra est pour les graphes<br/>
<strong>pondérés</strong> (poids positifs). Pour un graphe non<br/>
pondéré, parcours en largeur suffit.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Graphes — Q11 : Degré d'un sommet</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Le <strong>degré</strong> d'un sommet dans un graphe non orienté<br/>
est :</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Théorème classique (Euler) : la somme des degrés<br/>
d'un graphe non orienté est $2m$ (deux fois le<br/>
nombre d'arêtes), car chaque arête contribue $1$ à<br/>
deux sommets.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Le nombre d'arêtes incidentes à ce sommet</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : c'est aussi le nombre de ses voisins<br/>
dans un graphe simple. Par exemple, dans le graphe<br/>
$\{(A, B), (A, C), (B, C)\}$, le sommet $A$ est<br/>
de degré $2$. Pour un graphe orienté, on<br/>
distingue le <strong>degré entrant</strong> et le <strong>degré sortant</strong>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Le poids de l'arête la plus lourde incidente au sommet</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Le degré d'un sommet<br/>
est un nombre d'arêtes,<br/>
et non un poids. Le<br/>
poids n'intervient que<br/>
dans les graphes<br/>
pondérés, et n'est pas<br/>
lié à la notion de<br/>
degré.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>La distance de ce sommet à la racine du graphe</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : il n'y a pas de racine dans un graphe<br/>
général, et une distance se mesure entre deux<br/>
sommets. Confusion avec les arbres.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Sa profondeur dans un parcours en largeur</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la profondeur dépend du parcours choisi<br/>
et de son sommet de départ, alors que le degré<br/>
est une propriété du sommet lui-même.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Graphes — Q12 : Cycle dans un graphe</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Un <strong>cycle</strong> dans un graphe est :</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Un <strong>arbre</strong> est un graphe connexe sans cycle. C'est<br/>
cette absence de cycle qui caractérise l'arbre par<br/>
rapport au graphe général.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Un sommet isolé</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : un sommet isolé n'a aucune arête. Ce<br/>
n'est pas un cycle.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une seule arête répétée plusieurs fois de suite</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est un multi-graphe, notion<br/>
différente.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Un sommet de degré pair</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : pas la définition d'un cycle.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Une suite d'arêtes qui revient au départ</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : par exemple, le chemin<br/>
$A \to B \to C \to A$ forme un cycle. Détecter<br/>
les cycles est important : un graphe sans cycle<br/>
est appelé <strong>acyclique</strong> (DAG si orienté).</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Graphes — Q13 : Graphe connexe</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Un graphe non orienté est <strong>connexe</strong> quand :</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Le parcours en largeur ou parcours en profondeur depuis un sommet visite toute sa<br/>
<strong>composante connexe</strong>. Si on n'atteint pas tous les<br/>
sommets, le graphe n'est pas connexe.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Il est orienté</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la connexité concerne les graphes<br/>
orientés ET non orientés.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Il a beaucoup d'arêtes</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la quantité ne suffit pas. C'est la<br/>
structure qui compte.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Un chemin relie toute paire de sommets</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : on peut « atteindre » n'importe<br/>
quel sommet depuis n'importe quel autre. Si on<br/>
enlève cette propriété, on peut avoir plusieurs<br/>
<strong>composantes connexes</strong> (groupes isolés).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Il possède au moins $n$ arêtes au total</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : un graphe connexe à $n$ sommets a au<br/>
moins $n - 1$ arêtes (cas de l'arbre), mais<br/>
cela n'est pas suffisant.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Graphes — Q15 : Espace mémoire matrice vs liste</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Pour un graphe à $n = 1000$ sommets et $m = 5000$<br/>
arêtes, quelle représentation est la plus économe en<br/>
mémoire ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Densité d'un graphe : $d = m / \binom{n}{2}$. Pour<br/>
$d$ proche de $1$ (graphe dense), la matrice peut<br/>
être préférable. Pour $d$ proche de $0$ (creux), la<br/>
liste est meilleure.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>La liste d'adjacence ($O(n+m)$)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la liste d'adjacence consomme<br/>
de l'ordre du nombre d'arêtes plus le nombre de<br/>
sommets. Beaucoup mieux que la matrice quand le<br/>
graphe est <strong>creux</strong> ($m \ll n^2$), ce qui est<br/>
le cas en pratique pour beaucoup d'applications.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>La matrice d'adjacence ($O(n^2) = 10^6$ cases)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la matrice consomme bien plus que la<br/>
liste pour un graphe creux. La liste vaut mieux.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Aucune différence vraiment notable</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la différence est importante, surtout<br/>
pour les graphes creux.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Cela dépend du langage de programmation</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la complexité asymptotique est<br/>
indépendante du langage.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Graphes — Q16 : Parcours en largeur et distance</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Avec un parcours en largeur depuis le sommet $s$, on calcule pour chaque<br/>
sommet $v$ atteignable :</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Au moment où parcours en largeur découvre un sommet, il peut<br/>
enregistrer (a) la distance, (b) le sommet<br/>
« parent » dans le parcours en largeur. Avec cela, on peut<br/>
reconstituer le chemin le plus court en arêtes.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Les sommets isolés</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : parcours en largeur visite seulement les sommets<br/>
accessibles depuis $s$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Tous les chemins possibles</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : trop d'information. parcours en largeur calcule<br/>
uniquement la distance minimale, pas tous les<br/>
chemins.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Le poids minimal du chemin $s \to v$ (si pondéré)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : parcours en largeur calcule la distance en <strong>nombre d'arêtes</strong>, pas en poids. Pour les poids,<br/>
utiliser Dijkstra.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Le nombre minimal d'arêtes du chemin $s \to v$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : c'est précisément ce que parcours en largeur<br/>
calcule. Très utile dans des graphes où toutes<br/>
les arêtes sont équivalentes (réseau social,<br/>
jeu de plateau, etc.).</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Graphes — Q17 : Application réseau social</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Sur un réseau social, on veut trouver tous les amis<br/>
« à distance $2$ » (amis d'amis) d'un utilisateur $u$.<br/>
Quel algorithme utiliser ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Cette technique est utilisée par LinkedIn, Facebook,<br/>
etc. La théorie des « six degrés de séparation »<br/>
affirme que dans le graphe social mondial, la<br/>
distance maximale est environ $6$.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Un parcours en largeur limité à la profondeur $2$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : parcours en largeur avec une limite de<br/>
profondeur. À profondeur $0$ : $u$ ; à $1$ : ses<br/>
amis ; à $2$ : les amis des amis (sans compter<br/>
$u$ ni ses amis directs si on veut). Très<br/>
utilisé pour la recommandation d'amis.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Un tri des amis par valeur d'identifiant</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Le tri d'une liste n'a<br/>
aucun rapport avec la<br/>
recherche d'amis à une<br/>
distance donnée dans un<br/>
réseau social.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Un parcours en profondeur sans limite</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : parcours en profondeur n'organise pas les visites par<br/>
niveaux ; difficile d'extraire « distance $2$ ».</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une recherche dichotomique</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la dichotomie suppose une structure<br/>
ordonnée, ce qui n'est pas le cas d'un graphe<br/>
social.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Graphes — Q18 : Liste d'adjacence en Python</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Comment représenter naturellement une liste d'adjacence<br/>
en Python ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Variante orientée objet : créer une classe <code>Graphe</code><br/>
avec méthodes <code>ajouter_sommet</code>, <code>ajouter_arete</code>,<br/>
<code>voisins</code>, etc. Plus propre pour des projets<br/>
structurés. Mais en NSI, le dictionnaire suffit<br/>
souvent.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Comme un entier codant le nombre total d'arêtes</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : un entier ne résume qu'une quantité. Il ne<br/>
dit pas quels sommets sont reliés entre eux.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Comme un tuple unique contenant tous les sommets</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : on saurait quels sommets existent, mais pas<br/>
lesquels sont voisins. Un tuple, immuable, ne permet<br/>
pas non plus d'ajouter une arête.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Comme une chaîne de caractères énumérant les arêtes</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : il faudrait analyser le texte à chaque<br/>
accès aux voisins. Difficile à manipuler et<br/>
inefficace.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Comme un dictionnaire sommet vers liste de voisins</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : par exemple,<br/>
<code>g = {'A': ['B', 'C'], 'B': ['A'], 'C': ['A']}</code>.<br/>
Très lisible et efficace. On accède aux voisins<br/>
en $O(1)$ via la clé.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Graphes — Q19 : Code parcours en largeur</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quelle fonction Python implémente correctement un parcours en largeur<br/>
depuis un sommet <code>depart</code> dans un graphe <code>g</code> (dictionnaire) ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>L'ensemble <code>visites</code> est crucial : sans lui, sur un<br/>
graphe avec cycle, on bouclerait indéfiniment.<br/>
C'est l'une des erreurs classiques sur les graphes.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<pre><code>def bfs(g, depart):
    visites = {depart}
    pile = [depart]
    while pile:
        v = pile.pop()
        for w in g[v]:
            if w not in visites:
                visites.add(w)
                pile.append(w)
    return visites</code></pre>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>pile.pop()</code> retire le <strong>dernier</strong><br/>
élément ajouté : c'est une pile (LIFO), donc<br/>
un parcours en <strong>profondeur</strong>, pas en<br/>
largeur. Le parcours en largeur exige une<br/>
file (FIFO), par exemple <code>deque</code> avec<br/>
<code>popleft</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<pre><code>def bfs(g, depart):
    visites = {depart}
    from collections import deque
    f = deque([depart])
    while f:
        v = f.popleft()
        for w in g[v]:
            if w not in visites:
                visites.add(w)
                f.append(w)
    return visites</code></pre>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : structure standard. On garde une<br/>
ensemble <code>visites</code> pour éviter les boucles<br/>
infinies sur les graphes cycliques. La file<br/>
impose le parcours en largeur.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<pre><code>def bfs(g, depart):
    return g[depart]</code></pre>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : retourne uniquement les voisins<br/>
directs, pas le parcours complet.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<pre><code>def bfs(g, depart):
    from collections import deque
    f = deque([depart])
    resultat = []
    while f:
        v = f.popleft()
        resultat.append(v)
        for w in g[v]:
            f.append(w)
    return resultat</code></pre>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : sans ensemble <code>visites</code>, chaque<br/>
sommet est réenfilé à chaque fois qu'on le<br/>
rencontre : sur un graphe avec cycle, la<br/>
boucle ne termine jamais. Le marquage des<br/>
sommets visités est indispensable.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Graphes — Q20 : Arbre comme cas particulier</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Un <strong>arbre</strong> (au sens informatique) est un cas<br/>
particulier de :</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Tout arbre à $n$ sommets a exactement $n - 1$<br/>
arêtes. Si l'on a $n$ sommets, $n - 1$ arêtes et la<br/>
connexité, alors c'est un arbre (et donc sans<br/>
cycle). Triple caractérisation.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Un graphe connexe acyclique</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : tous les concepts d'arbre<br/>
(racine, hauteur, parcours) sont applicables aux<br/>
graphes plus généralement, mais l'arbre garantit<br/>
des propriétés (chemin unique entre deux<br/>
sommets) qui simplifient les algorithmes.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Un tableau linéaire à une dimension</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : un tableau est linéaire, un arbre<br/>
hiérarchique.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une file (premier entré, premier sorti)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : une file est une structure linéaire,<br/>
sans branchement. File et arbre sont distincts.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une pile (dernier entré, premier sorti)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : une pile est linéaire elle aussi. Pile<br/>
et arbre sont des structures totalement<br/>
différentes.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Graphes — Q21 : Algorithme de Dijkstra</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>L'algorithme de <strong>Dijkstra</strong> calcule les plus courts<br/>
chemins depuis une source dans un graphe pondéré. Quelle<br/>
est sa contrainte sur les poids ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Dijkstra s'implémente classiquement avec une <strong>file de priorité</strong> (tas), donnant une complexité<br/>
$O((n + m) \log n)$. Très utilisé dans les GPS,<br/>
les protocoles de routage et les jeux vidéo<br/>
(recherche de chemin pour les déplacements de<br/>
personnages).</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Les poids doivent être positifs ou nuls</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : avec des poids négatifs,<br/>
l'invariant glouton de Dijkstra ne tient plus.<br/>
Pour les poids négatifs, utiliser Bellman-Ford.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Les poids doivent être entiers</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : Dijkstra fonctionne avec des poids<br/>
réels.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Les poids doivent être triés à l'avance</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucun tri préalable requis. Dijkstra<br/>
gère lui-même la priorité via une file de<br/>
priorité.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Les poids doivent être tous identiques</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : si tous les poids sont identiques, parcours en largeur<br/>
suffit. Dijkstra est conçu pour des poids<br/>
variables.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Graphes — Q25 : Choisir le bon algorithme</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Vous voulez calculer le chemin le plus court entre deux<br/>
villes sur un réseau routier (les routes ont des<br/>
longueurs en kilomètres positives). Quel algorithme<br/>
choisir ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Récapitulatif algorithmes plus courts chemins :<br/>
parcours en largeur (non pondéré), Dijkstra (poids positifs),<br/>
Bellman-Ford (poids négatifs sans cycle négatif),<br/>
Floyd-Warshall (toutes paires de sommets en<br/>
$O(n^3)$).</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Un parcours en profondeur</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : parcours en profondeur ne calcule pas les plus courts<br/>
chemins.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Un parcours en largeur</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : parcours en largeur minimise le <strong>nombre d'arêtes</strong>, pas<br/>
la <strong>somme des poids</strong>. Le résultat ignorerait<br/>
les longueurs.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Tri topologique</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : utile pour les DAG, pas pour les<br/>
plus courts chemins en général.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>L'algorithme de Dijkstra</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : Dijkstra est exactement conçu<br/>
pour ce cas. Pour des graphes très grands, on<br/>
utilise des variantes optimisées (A*, Dijkstra<br/>
bidirectionnel, contractions).</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Graphes — Q26 : Conversion entre représentations</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Soit le graphe non orienté représenté par la<br/>
liste d'adjacence<br/>
<code>g = {'A': ['B', 'C'], 'B': ['A', 'C'], 'C': ['A', 'B']}</code>.<br/>
Quelle est la matrice d'adjacence correspondante<br/>
avec l'ordre des sommets <code>[A, B, C]</code> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Pour un graphe non orienté, la matrice<br/>
d'adjacence est toujours <strong>symétrique</strong>. Pour un<br/>
graphe orienté, ce n'est pas nécessairement le<br/>
cas. Les deux représentations sont équivalentes<br/>
en information ; le choix dépend des opérations<br/>
les plus fréquentes (test d'arête en O(1) avec<br/>
la matrice ; énumération des voisins efficace<br/>
avec la liste).</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<pre><code>[[0, 1, 0],
 [1, 0, 1],
 [0, 1, 0]]</code></pre>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : cette matrice correspondrait à un<br/>
graphe en chaîne <code>A - B - C</code>, où <code>A</code> et <code>C</code><br/>
ne sont pas directement reliés. Or le graphe<br/>
donné est complet : <code>A</code> et <code>C</code> sont voisins.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<pre><code>[[0, 1, 1],
 [1, 0, 1],
 [1, 1, 0]]</code></pre>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : chaque sommet est relié à<br/>
chacun des deux autres (graphe complet $K_3$).<br/>
La diagonale est nulle (pas de boucle), et la<br/>
matrice est symétrique (graphe non orienté).<br/>
Toutes les autres cases valent $1$ car les<br/>
arêtes existent dans tous les sens.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<pre><code>[[0, 0, 0],
 [0, 0, 0],
 [0, 0, 0]]</code></pre>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce serait un graphe sans aucune<br/>
arête. Or le graphe possède bien des arêtes<br/>
(chaque sommet a des voisins dans la liste<br/>
d'adjacence).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<pre><code>[[1, 1, 1],
 [1, 1, 1],
 [1, 1, 1]]</code></pre>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la diagonale ne doit pas être à $1$<br/>
car aucun sommet n'a de boucle sur lui-même<br/>
(par exemple, <code>g['A']</code> ne contient pas <code>'A'</code>).</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Graphes — Q28 : Trace d'un parcours en largeur</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>On effectue un parcours en largeur du graphe<br/>
<code>g = {'A': ['B', 'C'], 'B': ['A', 'D'], 'C': ['A', 'D'], 'D': ['B', 'C', 'E'], 'E': ['D']}</code><br/>
en partant de <code>'A'</code>, en visitant les voisins<br/>
dans l'ordre où ils apparaissent dans la liste.<br/>
Dans quel ordre les sommets sont-ils visités ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Le parcours en largeur visite les sommets dans<br/>
l'ordre croissant de leur distance (en arêtes)<br/>
au sommet de départ. Niveau $0$ : $A$. Niveau<br/>
$1$ : $B$, $C$. Niveau $2$ : $D$. Niveau $3$ :<br/>
$E$. C'est exactement ce qui justifie l'usage<br/>
du parcours en largeur pour calculer les plus<br/>
courts chemins en nombre d'arêtes.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>A, B, C, D, E</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : on commence par enfiler <code>A</code>,<br/>
puis on défile <code>A</code> et on enfile ses voisins<br/>
<code>B</code> et <code>C</code>. On défile <code>B</code>, on enfile <code>D</code><br/>
(<code>A</code> est déjà visité). On défile <code>C</code> (ses<br/>
voisins <code>A</code> et <code>D</code> sont déjà visités ou<br/>
enfilés). On défile <code>D</code>, on enfile <code>E</code>. On<br/>
défile <code>E</code>. Ordre de visite : A, B, C, D, E.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>A, B, D, E, C</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est un parcours en <strong>profondeur</strong><br/>
(qui suit une branche en suivant les<br/>
voisins). Le parcours en largeur, lui,<br/>
visite les sommets par niveaux croissants<br/>
de distance, pas en plongeant.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>A, C, B, D, E</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : on visite les voisins dans l'ordre<br/>
où ils apparaissent dans la liste. Pour <code>A</code>,<br/>
c'est <code>B</code> puis <code>C</code>. Donc <code>B</code> est visité<br/>
avant <code>C</code>, pas l'inverse.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>A, B, C, E, D</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : on visite <code>D</code> avant <code>E</code> car <code>D</code> est<br/>
enfilé en premier (par <code>B</code>), et <code>E</code> n'est<br/>
enfilé que plus tard (quand on visite <code>D</code>).<br/>
L'ordre est donc D avant E.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Graphes — Q29 : Trace de l'algorithme de Dijkstra</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>On considère le graphe pondéré suivant<br/>
(arêtes non orientées) :<br/>
<code>A-B (4)</code>, <code>A-C (2)</code>, <code>B-C (1)</code>, <code>B-D (5)</code>,<br/>
<code>C-D (8)</code>, <code>C-E (10)</code>, <code>D-E (2)</code>. On lance<br/>
Dijkstra depuis le sommet <code>A</code>. Quelle est la<br/>
distance minimale de <code>A</code> à <code>E</code> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Méthode systématique : tenir un tableau<br/>
<code>dist[v]</code> pour chaque sommet. Tant qu'il<br/>
reste des sommets non traités, extraire le<br/>
sommet de plus petite distance, et relâcher<br/>
(mettre à jour) ses voisins :<br/>
<code>dist[w] = min(dist[w], dist[v] + poids(v,w))</code>.<br/>
Cet algorithme est <strong>glouton</strong> : on traite<br/>
définitivement un sommet quand on l'extrait.<br/>
Cela exige des poids positifs ; sinon,<br/>
utiliser Bellman-Ford.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$14$ (en passant par <code>A-B-D-E</code>)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce chemin pèse $4 + 5 + 2 = 11$,<br/>
pas $14$. Et il n'est pas optimal :<br/>
passer d'abord par <code>C</code> permet d'atteindre<br/>
<code>B</code> à coût $3$ (au lieu de $4$), ce qui<br/>
réduit ensuite le chemin total.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$12$ (en passant directement par <code>C-E</code>)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est une distance valide<br/>
(chemin <code>A → C → E</code>), mais ce n'est pas<br/>
la <strong>plus courte</strong>. Le chemin<br/>
<code>A → C → B → D → E</code> totalise<br/>
$2 + 1 + 5 + 2 = 10$, ce qui est moins.<br/>
Dijkstra trouve toujours le minimum.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$11$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le chemin <code>A → B → D → E</code> pèse bien<br/>
$4 + 5 + 2 = 11$, mais ce n'est pas le plus<br/>
court. En considérant les autres chemins,<br/>
<code>A → C → E</code> pèse $12$ et<br/>
<code>A → C → B → D → E</code> pèse<br/>
$2 + 1 + 5 + 2 = 10$. C'est ce dernier<br/>
qui est minimal.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$10$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : on trace les distances<br/>
successivement. Étape 1 : on extrait<br/>
<code>A</code> ($0$), on met à jour <code>B=4</code>, <code>C=2</code>.<br/>
Étape 2 : on extrait <code>C</code> (le plus<br/>
petit, $2$), on met à jour<br/>
<code>B = min(4, 2+1) = 3</code>, <code>D = 2+8 = 10</code>,<br/>
<code>E = 2+10 = 12</code>. Étape 3 : on extrait<br/>
<code>B</code> ($3$), on met à jour<br/>
<code>D = min(10, 3+5) = 8</code>. Étape 4 : on<br/>
extrait <code>D</code> ($8$), on met à jour<br/>
<code>E = min(12, 8+2) = 10</code>. Étape 5 : on<br/>
extrait <code>E</code> ($10$), parcours terminé.<br/>
Le chemin optimal est donc<br/>
<code>A → C → B → D → E</code> de poids total<br/>
$2 + 1 + 5 + 2 = 10$.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Graphes — Q30 : Code du parcours en profondeur récursif</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quel code Python implémente correctement un<br/>
parcours en profondeur récursif d'un graphe <code>g</code><br/>
(dictionnaire d'adjacence) à partir d'un<br/>
sommet <code>depart</code> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Pour transformer ce parcours en profondeur<br/>
récursif en parcours en profondeur itératif<br/>
avec pile explicite, on remplace la<br/>
récursion par une pile que l'on dépile et<br/>
empile manuellement. Cela permet de mieux<br/>
contrôler la consommation de pile et<br/>
d'éviter <code>RecursionError</code> sur les très<br/>
grands graphes.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<pre><code>def parcours_profondeur(g, depart, visites=None):
    if visites is None:
        visites = []
    visites.append(depart)
    for voisin in g[depart]:
        if voisin not in visites:
            parcours_profondeur(g, voisin, visites)
    return visites</code></pre>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : on marque le sommet<br/>
courant en l'ajoutant à <code>visites</code>, puis<br/>
on appelle récursivement la fonction sur<br/>
chaque voisin non encore visité. La<br/>
récursivité utilise implicitement la<br/>
pile d'appels, ce qui réalise<br/>
naturellement le LIFO du parcours en<br/>
profondeur. L'astuce <code>visites=None</code> puis<br/>
création d'une liste vide dans la<br/>
fonction évite le piège du paramètre par<br/>
défaut mutable, qui serait partagé entre<br/>
les appels successifs. Sur le graphe<br/>
<code>g = {"A": ["B", "C"], "B": ["A", "D"], "C": ["A", "D"], "D": ["B", "C"]}</code>,<br/>
l'appel <code>parcours_profondeur(g, "A")</code><br/>
renvoie <code>['A', 'B', 'D', 'C']</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<pre><code>def parcours_profondeur(g, depart):
    for voisin in g[depart]:
        parcours_profondeur(g, voisin)</code></pre>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucune trace des sommets<br/>
visités. Sur un graphe avec un cycle, la<br/>
fonction boucle indéfiniment et finit<br/>
par lever <code>RecursionError</code>. La<br/>
mémorisation des sommets déjà visités<br/>
est essentielle.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<pre><code>def parcours_profondeur(g, depart, visites=None):
    if visites is None:
        visites = []
    visites.append(depart)
    for voisin in g[depart]:
        if voisin not in visites:
            parcours_profondeur(g, voisin)
    return visites</code></pre>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : l'appel récursif ne transmet pas<br/>
<code>visites</code>, donc chaque appel repart d'une<br/>
liste vide et oublie les sommets déjà<br/>
vus. Même sur un graphe sans cycle, la<br/>
liste renvoyée ne contiendrait que le<br/>
sommet de départ ; et dès qu'un sommet<br/>
est atteignable par deux chemins (toute<br/>
arête non orientée suffit), la fonction<br/>
repasse sans fin par les mêmes sommets et<br/>
l'appel finit sur <code>RecursionError</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<pre><code>def parcours_profondeur(g, depart, visites={}):
    visites[depart] = True
    for voisin in g[depart]:
        if voisin not in visites:
            parcours_profondeur(g, voisin, visites)
    return visites</code></pre>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : piège classique du paramètre par<br/>
défaut mutable. Le dictionnaire <code>visites = {}</code><br/>
est créé <strong>une seule fois</strong>, à la<br/>
définition de la fonction. Tous les<br/>
appels successifs à<br/>
<code>parcours_profondeur(g, ...)</code> partagent<br/>
alors le même dictionnaire, ce qui<br/>
conduit à un bug subtil : un nouveau<br/>
parcours hérite des sommets visités par<br/>
les parcours antérieurs. Après un premier<br/>
parcours ayant visité <code>A</code>, <code>B</code>, <code>C</code> et<br/>
<code>D</code>, un appel sur un autre graphe<br/>
<code>{"X": ["Y"], "Y": ["X"]}</code> renvoie un<br/>
dictionnaire qui contient encore <code>A</code>,<br/>
<code>B</code>, <code>C</code> et <code>D</code> en plus de <code>X</code> et <code>Y</code>.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Graphes — Q22 : Trace d'un parcours en profondeur</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>On effectue un parcours en profondeur récursif depuis<br/>
le sommet $A$ sur le graphe non orienté suivant :</p>
<p>- $A$ est relié à $B$ et $C$ ;<br/>
- $B$ est relié à $D$ ;<br/>
- $C$ est relié à $D$ et $E$ ;<br/>
- $D$ est relié à $E$.</p>
<p>On suppose que, à chaque sommet visité, les voisins sont<br/>
examinés dans l'ordre alphabétique. Dans quel ordre les<br/>
sommets sont-ils découverts ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Le parcours en profondeur (DFS) s'enfonce le long d'une<br/>
branche avant de revenir en arrière (pile ou récursion),<br/>
là où le parcours en largeur (file) progresse par<br/>
couches : sur ce même graphe, la largeur donnerait<br/>
$A, B, C, D, E$. Comparer les deux traces sur un même<br/>
graphe est le meilleur moyen de les distinguer.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$A, B, D, C, E$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : on s'enfonce d'abord. Depuis $A$,<br/>
on visite $B$ (premier voisin alphabétique), puis<br/>
$D$ (seul voisin non vu de $B$). Depuis $D$, les<br/>
voisins non vus sont $C$ et $E$ : l'alphabet impose<br/>
$C$, dont le seul voisin non vu est $E$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$A, B, C, D, E$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est la trace du parcours en <strong>largeur</strong><br/>
(par couches : $B$ et $C$ voisins de $A$, puis $D$,<br/>
puis $E$). En profondeur, on descend via $B$ puis<br/>
$D$ avant de revenir à $C$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$A, B, D, E, C$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : depuis $D$, les voisins non visités sont<br/>
$C$ et $E$ ; l'ordre alphabétique impose de<br/>
descendre par $C$ avant $E$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$A, C, D, B, E$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : trace d'un parcours en profondeur qui<br/>
examinerait $C$ avant $B$ ; or l'ordre alphabétique<br/>
impose $B$ comme premier voisin de $A$.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Graphes — Q23 : Choisir entre matrice et liste d'adjacence</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>On souhaite stocker un graphe non orienté représentant<br/>
un réseau social : environ un million d'utilisateurs<br/>
(sommets) et en moyenne une centaine de contacts par<br/>
personne (graphe creux, environ $10^8$ arêtes au total).<br/>
Quelle représentation est la plus adaptée en pratique ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Règle générale : pour un graphe <strong>dense</strong> (beaucoup<br/>
d'arêtes par rapport au carré du nombre de sommets),<br/>
la matrice d'adjacence est compétitive ; pour un<br/>
graphe <strong>creux</strong>, la liste d'adjacence l'emporte tant<br/>
en mémoire qu'en temps pour la plupart des<br/>
algorithmes (parcours, plus courts chemins).</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Une liste d'adjacence, la matrice serait bien trop énorme</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : une matrice d'adjacence à $10^6$<br/>
sommets occupe $10^{12}$ cases, soit environ un<br/>
téraoctet pour un seul bit par case, ce qui est<br/>
inenvisageable. Une liste d'adjacence ne stocke que<br/>
les arêtes réellement présentes (environ $10^8$),<br/>
ce qui reste dans des ordres de grandeur<br/>
manipulables.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une matrice d'adjacence, car elle permet de tester l'existence d'une arête en temps constant</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le temps constant pour tester l'existence<br/>
d'une arête est un avantage théorique réel, mais la<br/>
taille de la matrice ($10^{12}$ cases) la rend<br/>
inutilisable sur un graphe d'un million de sommets.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une matrice d'adjacence, car elle est plus simple à implémenter et à comprendre</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la simplicité d'implémentation ne compense<br/>
pas un coût mémoire prohibitif. Le critère décisif<br/>
dans ce scénario est la consommation mémoire.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Aucune des deux représentations n'est utilisable à cette taille de graphe</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la liste d'adjacence est exactement la<br/>
structure que tous les moteurs de réseaux sociaux<br/>
utilisent en pratique. Elle tient parfaitement en<br/>
mémoire pour un graphe creux à un million de<br/>
sommets.</p>]]></text>
    </feedback>
  </answer>
</question>

</quiz>
