45 lines
1.6 KiB
Python
45 lines
1.6 KiB
Python
|
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 où 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)
|