IA_TP_LAWSON-LARTEGO/TPIA/jeu_nim/exo8b.py

45 lines
1.6 KiB
Python
Raw Normal View History

2024-10-23 21:37:10 +02:00
def reconstruire_chemin(predecesseurs, etat_final):
"""
Reconstruit le chemin à partir de l'état final en suivant les parents jusqu'à l'état initial.
Args:
predecesseurs (dict): Dictionnaire chaque clé est un état et la valeur est le parent de cet état.
etat_final (list): L'état final à partir duquel remonter pour trouver le chemin.
Returns:
list: Le chemin depuis l'état initial jusqu'à l'état final, incluant tous les états intermédiaires.
"""
chemin = []
etat_actuel = tuple(etat_final) # Convertir en tuple pour correspondre aux clés dans 'predecesseurs'
# Remonter à travers les parents jusqu'à l'état initial
while etat_actuel is not None:
chemin.append(list(etat_actuel)) # Ajouter l'état actuel au chemin (reconverti en liste pour l'affichage)
etat_actuel = predecesseurs[etat_actuel] # Suivre le parent de l'état actuel
# Inverser le chemin pour qu'il soit dans l'ordre de l'état initial à l'état final
chemin.reverse()
return chemin
etat_initial = [3, 4, 5] # Exemple d'état initial
etat_final = [0, 0, 0] # Exemple d'état final (victoire)
# Dictionnaire des parents (simulé pour cet exemple)
predecesseurs = {
(3, 4, 5): None, # État initial sans parent
(2, 4, 5): (3, 4, 5),
(2, 3, 5): (2, 4, 5),
(2, 3, 4): (2, 3, 5),
(0, 3, 4): (2, 3, 4),
(0, 0, 4): (0, 3, 4),
(0, 0, 0): (0, 0, 4) # État final
}
# Reconstruction du chemin
chemin = reconstruire_chemin(predecesseurs, etat_final)
# Affichage du chemin
for etat in chemin:
print(etat)