{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# Algo - Graphe - Composantes connexes\n", "\n", "Les graphes sont un outil tr\u00e8s utilis\u00e9 pour mod\u00e9liser un ensemble de relations entre personnes, entre produits, entre consommateurs. Les utilisations sont nombreuses, syst\u00e8mes de recommandations, mod\u00e9lisation de la propagation d'une \u00e9pid\u00e9mie, mod\u00e9lisation de flux, plus court chemin dans un graphe.\n", "\n", "Un graphe est d\u00e9crit par un ensemble *V* de noeuds (ou *vertices* en anglais) et un ensemble d'arcs (ou *edges* en anglais) reliant deux noeuds entre eux. Chaque arc peut \u00eatre orient\u00e9 - un seul chemin d'une extr\u00e9mit\u00e9 \u00e0 l'autre est possible - ou pas.\n", "\n", "L'algorithme propos\u00e9 dans ce notebook calcule les composantes connexes dans un graphe non orient\u00e9. Un [graphe connexe](https://fr.wikipedia.org/wiki/Graphe_connexe) v\u00e9rifie la propri\u00e9t\u00e9 suivante : pour tout couple de noeuds, il existe un chemin - une s\u00e9quence d'arcs - reliant ces deux noeuds. Si un graphe est connexe, il contient une seule composante connexe, s'il ne l'est pas, alors on peut le diviser en sous-graphe connexe de telle sorte qu'il n'existe aucun arc reliant deux noeuds appartenant \u00e0 des sous-graphes distincts.\n", "\n", "Un graphe est enti\u00e8rement d\u00e9fini par sa [matrice d'adjacence](https://fr.wikipedia.org/wiki/Matrice_d%27adjacence) $M=(m_{ij})$ : $m_{ij} = 1$ si les noeuds $V_i$ et $V_j$ sont reli\u00e9s entre eux, 0 sinon. Si le graphe est orient\u00e9 alors $m_{ij} = m_{ji}$ : la matrice est sym\u00e9trique."]}, {"cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [{"data": {"text/html": ["
\n", ""], "text/plain": ["