Télécharger la présentation
1
Structures de données IFT-2000
Abder Alikacem Les graphes Exercices Édition Septembre 2009 Département d’informatique et de génie logiciel
2
Exercice 1 : le jeu de la lettre qui saute
lion pion pain paon poix paix pour poux peur Une suite de mots telle que deux mots consécutifs de cette suite ne différent que d’une seule lettre.
3
Exercice 1 : le jeu de la lettre qui saute
Etant donné un ensemble fini S de mots, écrivez une classe Graphe en C++ qui construit le graphe G = (S,F) défini par : les sommets de G sont les mots de S; il existe un arc (u,v) entre deux mots u,v de S si et seulement si u et v ne différent que d’une seule lettre.
4
Exercice 2 : Exploration en profondeur d’abord
1 2 3 4 7 5 6 Appliquer la méthode d’exploration en profondeur d’abord au graphe donné ci-dessus en commençant l’exploration en 1.
5
Exercice 3 : Exploration en profondeur d’abord
1. Ecrivez une procédure C++ réalisant une implémentation itérative de l’exploration en profondeur d’abord. Indication : on utilisera une pile. 2. Modifiez la procédure d’exploration en profondeur d’abord pour obtenir une procédure qui calcule un arbre recouvrant d’un graphe orienté donné.
6
Exercice 4 : Composantes connexes
Calculez les composantes connexes (resp. fortement connexes) du graphe des diviseurs. Ecrivez une procédure C++ qui calcule les composantes connexes (resp. fortement connexes) d’un graphe orienté donné.
7
Exercice 5 : Tri topologique
Montrez qu’un graphe peut être trié topologiquement si et seulement s’il ne possède pas de cycles. Indication : on pourra faire une récurrence. Ecrivez une procédure C++– basée sur l’analyse précédente – qui teste si un graphe peut être trié topologiquement et qui calcule un tri topologique le cas échéant. Indication : on pourra utiliser un tableau contenant le nombre de prédécesseurs de chaque sommet. Quelle est la complexité de votre algorithme ?
8
Exercice 6 : Chemins de coût minimal dans les graphes valués
Proposez une manière de représenter les graphes orientés sans boucles valués par liste de successeurs et écrivez la classe Java qui implémente cette représentation. Algorithme de Floyd : Adaptez l’algorithme de Warshall de calcul de la fermeture transitive d’un graphe - en vous servant de l’algèbre (min,+) - pour proposer un algorithme de calcul de la matrice contenant les coûts minimaux des chemins allant d’un sommet à un autre dans un graphe orienté valué sans boucles.
9
Exercice 7 : Points d’articulation
Calculez l’ensemble des points d’articulation du graphe des diviseurs. Ecrivez une procédure C++ qui calcule l’ensemble des points d’articulation d’un graphe (orienté) donné.
10
Exercice 8 : Graphes Eulériens
Un graphe est dit Eulérien si on peut dessiner l’ensemble de ses arcs sans lever le crayon Montrez qu’un graphe connexe est Eulérien si et seulement si le nombre de ses sommets de degré impair est 0 ou 2. Proposez un algorithme de recherche d’une chaîne Eulérienne (i.e. d’un parcours de graphe sans lever le crayon) au sein d’un graphe Eulérien. Ecrivez la procédure C++ correspondante.
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.