{"id":2997,"date":"2020-07-29T16:52:47","date_gmt":"2020-07-29T14:52:47","guid":{"rendered":"https:\/\/www.mathweb.fr\/euclide\/?page_id=2997"},"modified":"2023-04-16T16:19:26","modified_gmt":"2023-04-16T14:19:26","slug":"les-graphes-en-python","status":"publish","type":"page","link":"https:\/\/www.mathweb.fr\/euclide\/les-graphes-en-python\/","title":{"rendered":"Les graphes en Python"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">En Terminale NSI, il est question de graphes et de leur impl\u00e9mentation en Python. Cet outil math\u00e9matique, combin\u00e9 \u00e0 l&rsquo;informatique, permet par exemple de g\u00e9rer des r\u00e9seaux (routiers ou informatiques), de construire des labyrinthes, de repr\u00e9senter et d&rsquo;\u00e9tudier des flux migratoires, ou plus g\u00e9n\u00e9ralement, des changements d&rsquo;\u00e9tats. C&rsquo;est donc une notion tr\u00e8s importante.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Les graphes en Python, une notion avant tout math\u00e9matique<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Une br\u00e8ve histoire<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La notion de graphes semble appara\u00eetre pour la premi\u00e8re fois dans un article du math\u00e9maticien suisse Leonhard Euler parut en 1735, dans lequel il se penchait sur le \u00ab\u00a0probl\u00e8me des ponts de K\u00f6nigsberg\u00a0\u00bb, ville repr\u00e9sent\u00e9e avec ses ponts sur le sch\u00e9ma suivant:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"302\" height=\"238\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/Konigsberg_bridges.png\" alt=\"K\u00f6nigsberg et ses ponts : graphes en Pyton\" class=\"wp-image-2998\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/Konigsberg_bridges.png 302w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/Konigsberg_bridges-300x236.png 300w\" sizes=\"auto, (max-width: 302px) 100vw, 302px\" \/><figcaption>K\u00f6nigsberg et ses ponts<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Ce probl\u00e8me consistait \u00e0 \u00ab\u00a0trouver une promenade \u00e0 partir d&rsquo;un point donn\u00e9 qui fasse revenir \u00e0 ce point en passant une fois et une seule par chacun des sept ponts de la ville de K\u00f6nigsberg\u00a0\u00bb (source : <a label=\"undefined (s\u2019ouvre dans un nouvel onglet)\" href=\"https:\/\/fr.wikipedia.org\/wiki\/Th%C3%A9orie_des_graphes\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/fr.wikipedia.org\/wiki\/Th%C3%A9orie_des_graphes<\/a>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Par la suite, toujours au XVIII\u00e8me si\u00e8cle, le math\u00e9maticien fran\u00e7ais Alexandre-Th\u00e9ophile Vandermonde se pencha sur le probl\u00e8me du cavalier devant visiter toutes les cases d&rsquo;un \u00e9chiquier, probl\u00e8me r\u00e9soluble \u00e0 l&rsquo;aide de la th\u00e9orie des graphes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mais qu&rsquo;est-ce qu&rsquo;un graphe ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Un <em>graphe<\/em> est un couple \\(\\mathcal{G} = ( V ; E )\\), o\u00f9 <em>V<\/em> est un ensemble fini d&rsquo;\u00e9l\u00e9ments, appel\u00e9s les <em>sommets<\/em> du graphe (\u00ab\u00a0<em>V<\/em>\u00a0\u00bb comme <em>vertex<\/em>, autrement dit <em>sommets<\/em>) et <em>E<\/em> l&rsquo;ensemble des connexions entre les sommets, que l&rsquo;on nomme aussi les <em>ar\u00eates<\/em> du graphe (\u00ab\u00a0<em>E<\/em>\u00a0\u00bb comme <em>edges<\/em>, dans le sens de <em>ar\u00eates<\/em>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Par exemple, $$\\mathcal{G} = ( \\{ A; B;C\\} ; \\{(A,B);(A,C);(B,C) \\} )$$ peut d\u00e9signer le graphe ayant trois sommets : <em>A<\/em>, <em>B<\/em> et <em>C<\/em>, o\u00f9 <em>A<\/em> et <em>B<\/em>, <em>A<\/em> et <em>C<\/em> ainsi que <em>B<\/em> et <em>C<\/em> sont reli\u00e9s.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00c0 quoi \u00e7a peut servir ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Les graphes servent \u00e0 repr\u00e9senter des situations diverses. Cela peut \u00eatre des:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>villes (sommets) et leurs flux migratoires (ar\u00eates);<\/li><li>intersections de rues (sommets) et des rues (ar\u00eates);<\/li><li>cases de labyrinthes (sommets) et leurs connexions (ar\u00eates), le fait de pouvoir passer d&rsquo;une case \u00e0 l&rsquo;autre;<\/li><li>\u00e9tats d&rsquo;un individu (sommets), comme \u00ab\u00a0fatigu\u00e9\u00a0\u00bb, \u00ab\u00a0stress\u00e9\u00a0\u00bb, \u00ab\u00a0calme\u00a0\u00bb, \u2026) et le passage d&rsquo;un \u00e9tat \u00e0 l&rsquo;autre (ar\u00eates);<\/li><li>etc.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Vous l&rsquo;aurez peut-\u00eatre compris, dans certaines situations, deux sommets peuvent \u00eatre reli\u00e9s par une ar\u00eate avec ou sans orientation. Le simple fait de donner le couple \\(\\mathcal{G} = ( V ; E )\\) peut donc \u00eatre ambigu\u00eb, d&rsquo;o\u00f9 la n\u00e9cessit\u00e9 d&rsquo;introduire une repr\u00e9sentation graphique.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Repr\u00e9sentation sagittale<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">On nomme donc <em>repr\u00e9sentation sagittale<\/em> la repr\u00e9sentation graphique d&rsquo;un graphe; quand les ar\u00eates doivent avoir une orientation, on parlera de <em>graphes orient\u00e9s<\/em>. Dans ce cas, on parlera plut\u00f4t d&rsquo;<em>arcs<\/em> et non d&rsquo;ar\u00eates.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"177\" height=\"177\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe01.png\" alt=\"graphe non orient\u00e9 en python\" class=\"wp-image-3000\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe01.png 177w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe01-100x100.png 100w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe01-150x150.png 150w\" sizes=\"auto, (max-width: 177px) 100vw, 177px\" \/><figcaption>Repr\u00e9sentation sagittale du graphe non orient\u00e9 \\(\\mathcal{G} = ( \\{ A; B;C \\} ; \\{(A,B);(A,C);(B,C) \\}\\)<\/figcaption><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"239\" height=\"257\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe02.png\" alt=\"graphe orient\u00e9 en python\" class=\"wp-image-3001\"\/><figcaption>Repr\u00e9sentation sagittale du graphe orient\u00e9 \\(\\mathcal{G} = ( \\{ A; B;C\\} ; \\{(A,B);(A,C);(B,A);(B,C) \\}\\)<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Mais il arrive aussi que l&rsquo;on doive attribuer \u00e0 certaines arr\u00eates une pond\u00e9ration (un nombre). Par exemple, une probabilit\u00e9 (quand il s&rsquo;agit de passer d&rsquo;un \u00e9tat \u00e0 un autre), une distance ou encore un temps (quand les ar\u00eates repr\u00e9sentent une connexion entre deux lieux g\u00e9ographiques par exemple). On parle alors de <em>graphes pond\u00e9r\u00e9s<\/em> ou de <em>graphes probabilistes<\/em>.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"251\" height=\"253\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe03.png\" alt=\"graphe pond\u00e9r\u00e9 en python\" class=\"wp-image-3002\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe03.png 251w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe03-100x100.png 100w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe03-150x150.png 150w\" sizes=\"auto, (max-width: 251px) 100vw, 251px\" \/><figcaption>Repr\u00e9sentation sagittale du graphe pond\u00e9r\u00e9 non orient\u00e9 \\(\\mathcal{G} = ( \\{ A; B;C\\} ; \\{(A,B);(A,C);(B,C) \\}\\)<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Les pond\u00e9rations, les nombres qu&rsquo;il y a sur chaque arc, peuvent repr\u00e9senter des:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>distances (si les sommets repr\u00e9sentent des lieux g\u00e9ographiques par exemple);<\/li><li>temps (temps de parcours pour aller d&rsquo;un sommet \u00e0 un autre);<\/li><li>d\u00e9bits (dans le cas d&rsquo;un graphe repr\u00e9sentant un r\u00e9seau informatique);<\/li><li>probabilit\u00e9s (de changement d&rsquo;\u00e9tat; par exemple, probabilit\u00e9 de passer d&rsquo;un \u00e9tat \u00ab\u00a0anxieux\u00a0\u00bb \u00e0 un \u00e9tat \u00ab\u00a0euphorique\u00a0\u00bb) comme sur la figure ci-dessous;<\/li><li>etc.<\/li><\/ul>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"387\" height=\"337\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe04.png\" alt=\"graphe probabiliste en python\" class=\"wp-image-3003\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe04.png 387w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe04-300x261.png 300w\" sizes=\"auto, (max-width: 387px) 100vw, 387px\" \/><figcaption>Repr\u00e9sentation sagittale d&rsquo;un graphe probabiliste<br>o\u00f9, par exemple, la probabilit\u00e9 de passer de l&rsquo;\u00e9tat \u00ab\u00a0A\u00a0\u00bb <br>\u00e0 l&rsquo;\u00e9tat \u00ab\u00a0C\u00a0\u00bb est \u00e9gale \u00e0 0,5<\/figcaption><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Matrice d&rsquo;un graphe<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Quel que soit le type de graphe, qu&rsquo;il soit orient\u00e9 ou pas, pond\u00e9r\u00e9 ou non, il admet toujours une <em>repr\u00e9sentation matricielle<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Une <em>matrice <\/em>est un tableau de nombres, repr\u00e9sent\u00e9 entre parenth\u00e8ses et sans trait de d\u00e9limitation. Quand une matrice repr\u00e9sente une graphe, chaque ligne et colonne repr\u00e9sente un sommet. La matrice est alors appel\u00e9e <em>matrice d&rsquo;adjacence <\/em>du graphe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Par exemple, le graphe suivant:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"177\" height=\"177\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe01.png\" alt=\"\" class=\"wp-image-3000\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe01.png 177w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe01-100x100.png 100w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe01-150x150.png 150w\" sizes=\"auto, (max-width: 177px) 100vw, 177px\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">admet pour matrice d&rsquo;adjacence:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"472\" height=\"167\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/matrice-graphe01.png\" alt=\"matrice graphe non orient\u00e9 python\" class=\"wp-image-3004\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/matrice-graphe01.png 472w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/matrice-graphe01-300x106.png 300w\" sizes=\"auto, (max-width: 472px) 100vw, 472px\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Quand deux sommets <em>i<\/em> et <em>j<\/em> sont reli\u00e9s par une ar\u00eates, on met un \u00ab\u00a01\u00a0\u00bb \u00e0 l&rsquo;intersection de la ligne <em>i<\/em> et de la colonne <em>j<\/em>. Dans le cas contraire, on met un \u00ab\u00a00\u00a0\u00bb.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Remarquez que quand le graphe est non orient\u00e9, la matrice est sym\u00e9trique (par rapport \u00e0 la diagonale principale, celle qui part du haut \u00e0 gauche et qui va en bas \u00e0 droite, diagonale qui ne comporte que des \u00ab\u00a00\u00a0\u00bb).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La matrice du graphe suivant:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"239\" height=\"257\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe02.png\" alt=\"\" class=\"wp-image-3001\"\/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">est:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"176\" height=\"110\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/matrice-graphe02.png\" alt=\"matrice d'adjacence graphe orient\u00e9 python\" class=\"wp-image-3005\"\/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Ici, le sens (l&rsquo;orientation des arcs) \u00e0 une importance; il est donc normal que la matrice ne soit plus sym\u00e9trique par rapport \u00e0 la diagonale principale.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quand il s&rsquo;agit de graphes pond\u00e9r\u00e9s, on ne met plus uniquement de \u00ab\u00a00\u00a0\u00bb et de \u00ab\u00a01\u00a0\u00bb, mais on y met les pond\u00e9rations. Le graphe suivant:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"251\" height=\"253\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe03-1.png\" alt=\"\" class=\"wp-image-3006\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe03-1.png 251w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe03-1-100x100.png 100w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe03-1-150x150.png 150w\" sizes=\"auto, (max-width: 251px) 100vw, 251px\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">admet alors pour matrice d&rsquo;adjacence:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"164\" height=\"103\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/matrice-graphe03.png\" alt=\"matrice adjacence graphe pond\u00e9r\u00e9 python\" class=\"wp-image-3007\"\/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Pour le graphe suivant:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"387\" height=\"337\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe04.png\" alt=\"\" class=\"wp-image-3003\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe04.png 387w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe04-300x261.png 300w\" sizes=\"auto, (max-width: 387px) 100vw, 387px\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">sa matrice d&rsquo;adjacence est:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"206\" height=\"106\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/matrice-graphe04.png\" alt=\"matrice adjacence graphe probabiliste\" class=\"wp-image-3008\"\/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Ici, la somme des coefficients de chaque ligne doit valoir \u00ab\u00a01\u00a0\u00bb (somme des probabilit\u00e9s \u00ab\u00a0partantes\u00a0\u00bb d&rsquo;un sommet).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Deux exemples d&rsquo;application de graphes<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Labyrinthes<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Un labyrinthe peut \u00eatre vu comme un plateau d\u00e9compos\u00e9 en cases avec quelques traits de s\u00e9paration. Dans ce cas, le labyrinthe peut \u00eatre repr\u00e9sent\u00e9 par un  graphe o\u00f9 chaque sommet repr\u00e9sente une case du \u00ab\u00a0tableau\u00a0\u00bb et o\u00f9 chaque ar\u00eate repr\u00e9sente le fait que l&rsquo;on peut passer d&rsquo;une case \u00e0 l&rsquo;autre car il n&rsquo;y a pas de mur qui l&rsquo;en emp\u00eache.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"476\" height=\"349\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/labyrinthe-graphe.png\" alt=\"labyrinthe graphe python\" class=\"wp-image-3009\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/labyrinthe-graphe.png 476w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/labyrinthe-graphe-300x220.png 300w\" sizes=\"auto, (max-width: 476px) 100vw, 476px\" \/><figcaption>Un labyrinthe peut \u00eatre vu comme un graphe<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">C&rsquo;est d&rsquo;ailleurs ainsi que j&rsquo;ai programm\u00e9 mon logiciel pour construire des labyrinthe (voir <a aria-label=\"undefined (s\u2019ouvre dans un nouvel onglet)\" href=\"https:\/\/www.mathweb.fr\/euclide\/generateur-de-labyrinthes\/\" target=\"_blank\" rel=\"noreferrer noopener\">cette page<\/a>).<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Changements d&rsquo;\u00e9tats<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Supposons que la matrice suivante repr\u00e9sente des changements d&rsquo;\u00e9tats:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"387\" height=\"337\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe04.png\" alt=\"\" class=\"wp-image-3003\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe04.png 387w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe04-300x261.png 300w\" sizes=\"auto, (max-width: 387px) 100vw, 387px\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">On peut par exemple imaginer que A, B et C sont respectivement les \u00e9tats:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>A : \u00ab\u00a0fatigu\u00e9\u00a0\u00bb<\/li><li>B : \u00ab\u00a0motiv\u00e9\u00a0\u00bb<\/li><li>C : \u00ab\u00a0neutre\u00a0\u00bb<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">d&rsquo;un individu. Supposons alors cet cet individu soit initialement fatigu\u00e9 (\u00e9tat A). On nomme alors:$$E_0=\\begin{pmatrix}1  &amp;0&amp;0\\end{pmatrix}$$ la repr\u00e9sentation matricielle de cet \u00e9tat initial. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Supposons maintenant qu&rsquo;une observation de l&rsquo;\u00e9tat soit faite toute les heures. Alors, si \\(M\\) est la matrice d&rsquo;adjacence du graphe, l&rsquo;\u00e9tat probabiliste au bout d&rsquo;une heure est donn\u00e9 par:$$E_1 = E_0 \\times M = \\begin{pmatrix}0,4 &amp; 0,1 &amp; 0,5 \\end{pmatrix}.$$Une heure apr\u00e8s, on se retrouve avec un \u00e9tat repr\u00e9sent\u00e9 par:$$E_2 = E_1 \\times M = E_0 \\times M^2 = \\begin{pmatrix}0,23 &amp; 0,26 &amp; 0,51\\end{pmatrix}.$$Ainsi, si l&rsquo;on veut savoir l&rsquo;\u00e9tat \u00e0 tr\u00e8s long terme, on calcule:$$E_\\infty = E_0 \\times M^\\infty \\approx \\begin{pmatrix}0,3 &amp; 0,26 &amp; 0,44\\end{pmatrix}.$$Cet \u00e9tat nous donne les probabilit\u00e9s d&rsquo;\u00eatre dans les \u00e9tats <em>A<\/em>, <em>B<\/em> et <em>C<\/em>. Ici, \u00e0 long terme, on a par exemple 3 chances sur 10 d&rsquo;\u00eatre dans l&rsquo;\u00e9tat <em>A<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quand le graphe est pond\u00e9r\u00e9 et que les pond\u00e9rations repr\u00e9sentent non plus des probabilit\u00e9s mais des nombres (comme des distances ou du temps), la matrice d&rsquo;adjacence peut nous permettre de trouver le plus court chemin pour relier deux sommets, c&rsquo;est-\u00e0-dire le chemin dont la somme des pond\u00e9rations est minimal. Un algorithme connu est celui de <em>Dijkstra<\/em>. C&rsquo;est d&rsquo;ailleurs cet algorithme qui est utilis\u00e9 par les routeurs pour trouver le chemin le plus rapide, donc qui n\u00e9cessite le moins de temps de transmission.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vous comprendrez donc que les matrices d&rsquo;adjacence permettent de voir de fa\u00e7on abstraite des graphes et donc de les impl\u00e9menter dans un programme informatique.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Impl\u00e9mentation de graphes en Python<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Les graphes peuvent \u00eatre impl\u00e9ment\u00e9s en Python de plusieurs fa\u00e7on. J&rsquo;en ai choisi deux.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Approche na\u00efve (mais simple)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Une approche na\u00efve serait de consid\u00e9rer un graphe comme un dictionnaire, o\u00f9 les cl\u00e9s sont les sommets et les valeurs, les sommets reli\u00e9s aux cl\u00e9s. Cela donnerait par exemple:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">G = { \n\t'A' : ('B' , 'C') , \n\t'B' : ('A' , 'C'),\n\t'C' : ('A' , 'B')\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">qui repr\u00e9sente le graphe:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"177\" height=\"177\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe01.png\" alt=\"\" class=\"wp-image-3000\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe01.png 177w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe01-100x100.png 100w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe01-150x150.png 150w\" sizes=\"auto, (max-width: 177px) 100vw, 177px\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Pour les graphes pond\u00e9r\u00e9s, on peut imaginer quelque chose qui ressemble \u00e0 \u00e7a:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">G = { \n\t'A' : ( {'B':4} , {'C':7} ) , \n\t'B' : ( {'A':4} , {'C':2} ),\n\t'C' : ( {'A':4} , {'B':2} )\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">qui repr\u00e9sente le graphe:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"251\" height=\"253\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe03.png\" alt=\"\" class=\"wp-image-3002\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe03.png 251w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe03-100x100.png 100w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/graphe03-150x150.png 150w\" sizes=\"auto, (max-width: 251px) 100vw, 251px\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Ce genre d&rsquo;impl\u00e9mentation est nomm\u00e9e <em>impl\u00e9mentation par liste d&rsquo;adjacence<\/em> de graphes en Python.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Une autre fa\u00e7on d&rsquo;impl\u00e9menter des graphes en Python est d&rsquo;utiliser leur matrice d&rsquo;adjacence. Ainsi, pour le premier graphe, on aura:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">G = [\n\t\t[ 0 , 1 , 1 ] ,\n\t\t[ 1 , 0 , 1 ] ,\n\t\t[ 1 , 1 , 0 ]\n\t]<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;inconv\u00e9nient d&rsquo;une telle impl\u00e9mentation r\u00e9side dans l&rsquo;espace m\u00e9moire d\u00e9di\u00e9 au graphe. En effet, pour un graphe \u00e0 <em>n<\/em> sommets, il faut une matrice avec <em>n<\/em>\u00b2 nombres\u2026 et la plupart du temps, il y a beaucoup de \u00ab\u00a00\u00a0\u00bb (on parle de <em>matrices creuses<\/em>), ce qui est ballot non ?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans ce cas, l&rsquo;impl\u00e9mentation par liste d&rsquo;adjacence est bien mieux car n\u00e9cessite moins d&rsquo;espace m\u00e9moire.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Des graphes en Python sont des objets<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Un graphe n&rsquo;est autre qu&rsquo;une repr\u00e9sentation d&rsquo;une situation; c&rsquo;est donc un objet abstrait\u2026 Et en informatique, il existe un paradigme de programmation permettant d&rsquo;impl\u00e9menter de telles notions : la <em>Programmation Orient\u00e9e Objet<\/em> (POO pour les intimes). Ce paradigme colle parfaitement \u00e0 l&rsquo;impl\u00e9mentation des graphes, m\u00eame si c&rsquo;est un peu plus compliqu\u00e9 que l&rsquo;approche na\u00efve.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Selon ce paradigme, un objet est repr\u00e9sent\u00e9 par une <em>classe<\/em>, contenant id\u00e9alement un <em>constructeur<\/em> et des <em>m\u00e9thodes<\/em>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Le constructeur<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">C&rsquo;est la \u00ab\u00a0fonction interne\u00a0\u00bb \u00e0 la classe, \u00e0 l&rsquo;objet, qui d\u00e9finit pour cet objet, et lui seulement, d&rsquo;\u00e9ventuels param\u00e8tres.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Prenons un exemple de graphe non orient\u00e9 et non pond\u00e9r\u00e9 (pour faire simple). On peut alors imaginer que l&rsquo;on d\u00e9clare un graphe (le premier par exemple) sous la forme:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">G = Graphe( ('A','B') , ('A','C') , ('B','C') )<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dans ce cas, on peut imaginer un constructeur de la mani\u00e8re suivante:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class Graphe:\n    def __init__(self,*args):\n        self.edges = [ e for e in args ]\n        self.nodes = []\n        for e in self.edges:\n            if e[0] not in self.nodes:\n                self.nodes += [ e[0] ]\n            if e[1] not in self.nodes:\n                self.nodes += [ e[1] ]\n    \nG = Graphe( ('A','B') , ('A','C') , ('B','C') )\nprint( 'Les noeuds de G sont : {}'.format(G.nodes) )\nprint( 'Les ar\u00eates de G sont : {}'.format(G.edges) )<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">On a ici d\u00e9finit un constructeur qui construit une liste des n\u0153uds du graphe et une liste contenant toutes les ar\u00eates.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">M\u00e9thodes de la classe<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c0 ce constructeur, on peut ajouter \u00e0 notre classe une m\u00e9thode permettant d&rsquo;avoir la matrice d&rsquo;adjacence:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class Graphe:\n    def __init__(self,*args):\n        self.edges = [ e for e in args ]\n        self.nodes = []\n        for e in self.edges:\n            if e[0] not in self.nodes:\n                self.nodes += [ e[0] ]\n            if e[1] not in self.nodes:\n                self.nodes += [ e[1] ]\n                \n    def mat(self):\n        self.mat = [[ 0 for j in range(len(self.nodes))] for i in range(len(self.nodes))] \n        for i in self.edges:\n            self.mat[ self.nodes.index(i[0]) ][ self.nodes.index(i[1]) ] = 1\n            self.mat[ self.nodes.index(i[1]) ][ self.nodes.index(i[0]) ] = 1\n        \n        return self.mat\n    \nG = Graphe( ('A','B') , ('A','C') , ('B','C') )\nprint( 'Les noeuds de G sont : {}'.format(G.nodes) )\nprint( 'Les ar\u00eates de G sont : {}'.format(G.edges) )\nprint( 'La matrice d\\'adjacence de G est : {}'.format(G.mat()) )<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La fa\u00e7on d&rsquo;impl\u00e9menter un graphe n&rsquo;est pas unique : elle d\u00e9pend de notre fa\u00e7on de voir les choses mais aussi de ce que l&rsquo;on veut en faire. Aussi, la classe que je viens de vous montrer n&rsquo;est pas unique. D&rsquo;ailleurs, dans le livre de <a aria-label=\"undefined (s\u2019ouvre dans un nouvel onglet)\" href=\"https:\/\/livre.fnac.com\/a14729007\/Stephane-Pasquet-Interros-des-Lycees-Numerique-Sciences-Informatiques-Terminale\" target=\"_blank\" rel=\"noreferrer noopener\">Terminale NSI<\/a> que j&rsquo;ai co-\u00e9crit, j&rsquo;utilise d&rsquo;autres mani\u00e8res.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><a href=\"https:\/\/livre.fnac.com\/a14729007\/Stephane-Pasquet-Interros-des-Lycees-Numerique-Sciences-Informatiques-Terminale\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"600\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/Interros-des-Lycees-Numerique-Sciences-Informatiques-Terminale.jpg\" alt=\"\" class=\"wp-image-2816\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/Interros-des-Lycees-Numerique-Sciences-Informatiques-Terminale.jpg 400w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/Interros-des-Lycees-Numerique-Sciences-Informatiques-Terminale-200x300.jpg 200w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/a><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Il est bien connu que chaque script ressemble \u00e0 son cr\u00e9ateur\u2026 Donc vous pouvez imaginer votre propre classe <em>Graphe<\/em> d&rsquo;une autre fa\u00e7on. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans ce livre, co-\u00e9crit avec un v\u00e9ritable informaticien en exercice, vous trouverez un cours plus complet.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En Terminale NSI, il est question de graphes et de leur impl\u00e9mentation en Python. Cet outil math\u00e9matique, combin\u00e9 \u00e0 l&rsquo;informatique, permet par exemple de g\u00e9rer des r\u00e9seaux (routiers ou informatiques), de construire des labyrinthes, de repr\u00e9senter et d&rsquo;\u00e9tudier des flux migratoires, ou plus g\u00e9n\u00e9ralement, des changements d&rsquo;\u00e9tats. C&rsquo;est donc une [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2997","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Les graphes en Python - Mathweb.fr - Terminale NSI<\/title>\n<meta name=\"description\" content=\"Les graphes peuvent \u00eatre impl\u00e9menter en Python \u00e0 l&#039;aide de la POO. Qu&#039;est-ce qu&#039;un graphe ? Comment l&#039;impl\u00e9menter ? Programme Terminale NSI.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.mathweb.fr\/euclide\/les-graphes-en-python\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Les graphes en Python - Mathweb.fr - Terminale NSI\" \/>\n<meta property=\"og:description\" content=\"Les graphes peuvent \u00eatre impl\u00e9menter en Python \u00e0 l&#039;aide de la POO. Qu&#039;est-ce qu&#039;un graphe ? Comment l&#039;impl\u00e9menter ? Programme Terminale NSI.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mathweb.fr\/euclide\/les-graphes-en-python\/\" \/>\n<meta property=\"og:site_name\" content=\"Mathweb.fr\" \/>\n<meta property=\"article:modified_time\" content=\"2023-04-16T14:19:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/Konigsberg_bridges.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data1\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/les-graphes-en-python\\\/\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/les-graphes-en-python\\\/\",\"name\":\"Les graphes en Python - Mathweb.fr - Terminale NSI\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/les-graphes-en-python\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/les-graphes-en-python\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2020\\\/07\\\/Konigsberg_bridges.png\",\"datePublished\":\"2020-07-29T14:52:47+00:00\",\"dateModified\":\"2023-04-16T14:19:26+00:00\",\"description\":\"Les graphes peuvent \u00eatre impl\u00e9menter en Python \u00e0 l'aide de la POO. Qu'est-ce qu'un graphe ? Comment l'impl\u00e9menter ? Programme Terminale NSI.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/les-graphes-en-python\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/les-graphes-en-python\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/les-graphes-en-python\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2020\\\/07\\\/Konigsberg_bridges.png\",\"contentUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2020\\\/07\\\/Konigsberg_bridges.png\",\"width\":302,\"height\":238},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/les-graphes-en-python\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Les graphes en Python\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#website\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/\",\"name\":\"Mathweb.fr\",\"description\":\"Math\u00e9matiques, LaTeX et Python\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#\\\/schema\\\/person\\\/e4d3bb07968238378f0d5052a70dcd69\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#\\\/schema\\\/person\\\/e4d3bb07968238378f0d5052a70dcd69\",\"name\":\"St\u00e9phane Pasquet\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-logo-mathweb.webp\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-logo-mathweb.webp\",\"contentUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-logo-mathweb.webp\",\"width\":74,\"height\":77,\"caption\":\"St\u00e9phane Pasquet\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-logo-mathweb.webp\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Les graphes en Python - Mathweb.fr - Terminale NSI","description":"Les graphes peuvent \u00eatre impl\u00e9menter en Python \u00e0 l'aide de la POO. Qu'est-ce qu'un graphe ? Comment l'impl\u00e9menter ? Programme Terminale NSI.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.mathweb.fr\/euclide\/les-graphes-en-python\/","og_locale":"fr_FR","og_type":"article","og_title":"Les graphes en Python - Mathweb.fr - Terminale NSI","og_description":"Les graphes peuvent \u00eatre impl\u00e9menter en Python \u00e0 l'aide de la POO. Qu'est-ce qu'un graphe ? Comment l'impl\u00e9menter ? Programme Terminale NSI.","og_url":"https:\/\/www.mathweb.fr\/euclide\/les-graphes-en-python\/","og_site_name":"Mathweb.fr","article_modified_time":"2023-04-16T14:19:26+00:00","og_image":[{"url":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/Konigsberg_bridges.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Dur\u00e9e de lecture estim\u00e9e":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.mathweb.fr\/euclide\/les-graphes-en-python\/","url":"https:\/\/www.mathweb.fr\/euclide\/les-graphes-en-python\/","name":"Les graphes en Python - Mathweb.fr - Terminale NSI","isPartOf":{"@id":"https:\/\/www.mathweb.fr\/euclide\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mathweb.fr\/euclide\/les-graphes-en-python\/#primaryimage"},"image":{"@id":"https:\/\/www.mathweb.fr\/euclide\/les-graphes-en-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/Konigsberg_bridges.png","datePublished":"2020-07-29T14:52:47+00:00","dateModified":"2023-04-16T14:19:26+00:00","description":"Les graphes peuvent \u00eatre impl\u00e9menter en Python \u00e0 l'aide de la POO. Qu'est-ce qu'un graphe ? Comment l'impl\u00e9menter ? Programme Terminale NSI.","breadcrumb":{"@id":"https:\/\/www.mathweb.fr\/euclide\/les-graphes-en-python\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mathweb.fr\/euclide\/les-graphes-en-python\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.mathweb.fr\/euclide\/les-graphes-en-python\/#primaryimage","url":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/Konigsberg_bridges.png","contentUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/07\/Konigsberg_bridges.png","width":302,"height":238},{"@type":"BreadcrumbList","@id":"https:\/\/www.mathweb.fr\/euclide\/les-graphes-en-python\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.mathweb.fr\/euclide\/"},{"@type":"ListItem","position":2,"name":"Les graphes en Python"}]},{"@type":"WebSite","@id":"https:\/\/www.mathweb.fr\/euclide\/#website","url":"https:\/\/www.mathweb.fr\/euclide\/","name":"Mathweb.fr","description":"Math\u00e9matiques, LaTeX et Python","publisher":{"@id":"https:\/\/www.mathweb.fr\/euclide\/#\/schema\/person\/e4d3bb07968238378f0d5052a70dcd69"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mathweb.fr\/euclide\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":["Person","Organization"],"@id":"https:\/\/www.mathweb.fr\/euclide\/#\/schema\/person\/e4d3bb07968238378f0d5052a70dcd69","name":"St\u00e9phane Pasquet","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2025\/06\/cropped-logo-mathweb.webp","url":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2025\/06\/cropped-logo-mathweb.webp","contentUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2025\/06\/cropped-logo-mathweb.webp","width":74,"height":77,"caption":"St\u00e9phane Pasquet"},"logo":{"@id":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2025\/06\/cropped-logo-mathweb.webp"}}]}},"_links":{"self":[{"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/pages\/2997","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/comments?post=2997"}],"version-history":[{"count":0,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/pages\/2997\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/media?parent=2997"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}