C11 Graphes ¶
Cours¶
Attention
Ce diaporama ne vous donne que quelques points de repères lors de vos révisions. Il devrait être complété par la relecture attentive de vos propres notes de cours et par une révision approfondie des exercices.
Travaux pratiques¶
Exercice 1 : ImplĂ©mentation par matrice d'adjacence¶
-
Ecrire une fonction
cree_graphequi prend en argument un entiernet renvoie une liste denlistes denboolĂ©ens (tous initialisĂ©s Ăfalse). Cette liste permet donc de reprĂ©senter un graphe par matrice d'adjacence. -
Ecrire une fonction
cree_aretequi prend en argument un graphe représenté par une matrice d'adjacence et deux entiersietjet modifie cette matrice de façon à créer l'arci -> jdu graphe. -
On donne ci-dessous une fonction de visualisation d'un graphe représenté par une matrice d'adjacence :
Attention pour utiliser cette fonction il faut importer le moduledef visualise(g): '''Visualise le graphe g sous forme d'image avec graphviz.''' img_graphe = graphviz.Digraph() for i in range(len(g)): img_graphe.node(str(i)) for j in range(len(g)): if g[i][j]: img_graphe.edge(str(i), str(j)) img_graphe.view()graphviz.
Créer un graphe à 5 sommets (numérotés 0,1,2,3 et 4) et y créer les arcs suivants :0 -> 1,0 -> 2,1 -> 2,2 -> 3,4 -> 1puis visualiser ce graphe. -
Ecrire une fonction qui affiche la matrice d'adjacence du graphe. Le résultat attendu pour le graphe ci-dessus est :
-
Ecrire une fonction qui
degre_sortantqui prend en argument un graphegreprésenté par une matrice d'adjacence ainsi qu'un entieriet renvoie le degre sortant de ce sommet. -
Ecrire une fonction
sucesseursqui prend en argument un graphegreprésenté par une matrice d'adjacence ainsi qu'un entieriet renvoie la liste des successeurs de ce sommet. -
Ecrire une fonction
rondequi prend en entrée un entiernet renvoie un graphe dans lequel chaque sommetia un unique successeur : le sommeti+1modulon. -
Ecrire une fonction qui
degre_entrantqui prend en argument un graphegreprésenté par une matrice d'adjacence ainsi qu'un entieriet renvoie le degre entrant de ce sommet. -
Ecrire une fonction
predecesseursqui prend en argument un graphegreprésenté par une matrice d'adjacence ainsi qu'un entieriet renvoie la liste des predecesseurs de ce sommet. -
Reprendre les questions précédentes dans le cadre d'un graphe non orienté.
Exercice 2 : ImplĂ©mentation par liste d'adjacence¶
-
Ecrire une fonction
cree_graphequi prend en argument un entiernet renvoie un dictionnaire dont les clĂ©s sont les entiers de0 Ăn-1et dont les valeurs sont des listes vides. Ce dictionnaire permet donc de reprĂ©senter un graphe par listes d'adjacence. -
Ecrire une fonction
cree_aretequi prend en argument un graphe représenté par liste d'adjacence et deux entiersietjet modifie ce dictionnaire de façon à créer l'arci -> jdu graphe. -
On donne ci-dessous une fonction de visualisation d'un graphe représenté par une matrice d'adjacence :
Attention pour utiliser cette fonction il faut importer le moduledef visualise(g): img_graphe = graphviz.Digraph() for s in g: img_graphe.node(str(s)) for t in g[s]: img_graphe.edge(str(s),str(t)) img_graphe.view()graphviz.
Créer un graphe à 5 sommets (numérotés 0,1,2,3 et 4) et y créer les arcs suivants :0 -> 1,0 -> 2,1 -> 2,2 -> 3,4 -> 1puis visualiser ce graphe. -
Ecrire une fonction qui
degre_sortantqui prend en argument un graphegreprésenté par liste d'adjacence ainsi qu'un entieriet renvoie le degre sortant de ce sommet. -
Ecrire une fonction
sucesseursqui prend en argument un graphegreprésenté par liste d'adjacence ainsi qu'un entieriet renvoie la liste des successeurs de ce sommet. -
Ecrire une fonction
rondequi prend en entrée un entiernet renvoie un graphe dans lequel chaque sommetia un unique successeur : le sommeti+1modulon. -
Ecrire une fonction qui
degre_entrantqui prend en argument un graphegreprésenté par liste d'adjacence ainsi qu'un entieriet renvoie le degre entrant de ce sommet. -
Ecrire une fonction
predecesseursqui prend en argument un graphegreprésenté par une matrice d'adjacence ainsi qu'un entieriet renvoie la liste des predecesseurs de ce sommet. -
Reprendre les questions précédentes dans le cadre d'un graphe non orienté.
Exercice 3 : D'une reprĂ©sentation Ă l'autre¶
-
Ecrire une fonction
matrice_vers_listequi prend en entrée un graphe représenté par une matrice d'adjacence (tel que dans l'exercice 1) et renvoie ce même graphe représenté par liste d'adjacence (tel que dans l'exercice 2). -
Ecrire une fonction
liste_vers_matricequi prend en entrée un graphe représenté par liste d'adjacence (tel que dans l'exercice 2) et renvoie ce même graphe représenté par matrice d'adjacence (tel que dans l'exercice 1).
Exercice 4 : Exercices sur Codex¶
Quelques exercices sur les graphes sur Codex