ioCode
Un graphe en dictionnaire
Dictionnaires • Cours-TP 2A
Dans cet exercice, nous allons créer un graphe de lieux, mais cette fois-ci en encapsulant les algorithmes de parcours (largeur et profondeur) dans des fonctions réutilisables.
Voici le schéma des chemins orientés de notre forêt :
-
Entréemène àClairièreetGrotte, -
Clairièremène àRivière, -
Grottemène àRivière, -
Rivièremène àSortie, -
Sortiene mène nulle part (cul-de-sac). -
Si vous voulez faire afficher sur la console la valeur d'une variable nommée
v, utilisez l'instructionprint(v).
- Modélisation du graphe : Créez un dictionnaire1IndiceAssociez chaque nom de lieu à une liste de ses destinations possibles. N'oubliez pas la Sortie avec une liste vide
[].grapheoù chaque clé (chaîne de caractères) est associée à la liste de ses destinations. N'oubliez pas la"Sortie"qui a une liste vide. - Accès aux voisins : Récupérez la liste des voisins de la2IndiceLa syntaxe d'accès est
nom_dictionnaire[cle]."Clairière"depuis le graphe et stockez-la dans la variablevoisins_clairiere. - Fonction Parcours en Largeur (BFS) : Écrivez une fonction3IndiceInitialisez la file avec le sommet de départ passé en paramètre. Utilisez
.pop(0)pour retirer le premier élément et renvoyez la liste des visites à la fin.parcours_largeur(graphe, depart)qui prend en paramètres le dictionnaire du graphe et le nom du sommet de départ. Elle doit implémenter l'algorithme avec une file (utilisation de.pop(0)) et renvoyer la liste ordonnée des sommets visités. - Fonction Parcours en Profondeur (DFS) : Écrivez une fonction4IndiceIdentique au parcours en largeur, mais utilisez
.pop()(sans index) pour retirer le dernier élément de la liste (comportement de pile).parcours_profondeur(graphe, depart)qui implémente l'algorithme avec une pile (utilisation de.pop()) et renvoie la liste ordonnée des sommets visités. - Appel et calcul du coût : Appelez la fonction5IndiceAppelez d'abord votre fonction de parcours en largeur. Ensuite, multipliez la longueur de la liste obtenue (via
len()) par 0.5.parcours_largeuravec legrapheet"Entrée"comme point de départ. Stockez le résultat dans la variablevisites_bfs. Sachant que chaque lieu visité coûte0.5point d'énergie, calculez l'énergie totale dépensée et stockez ce nombre décimal (float) dans la variableenergie_depensee.
Langage
Console initialisée. En attente de l'interpréteur...