- Ak_j,
Bonjour, je fais un solveur qui doit déterminer s’il est possible.
De gagner à partir d’un état du jeu donné. En cas de réponse positive, le solveur doit aussi fournir.
Une solution à la grille, c’est-à-dire une liste des coups à jouer pour arriver à la victoire.
Et voici l’algorithme que l’on m’a donné (qui ressemble à l’algorithme de recherche en profondeur)
Mais mon code à plusieurs soucis visite un (dictionnaire) n’enregistre pas la position des moutons (car la variable moutons est une liste de tuple) et je n’arrive pas à vérifier, si la position des moutons est déjà dans le dictionnaire.
Et j’aimerais savoir si mon code reprend le principe du algorithme du sac à dos ?
Je vous remercie d’avance.
def solveur(plateau,moutons,visite,nombre_herbe):
"""
Le rôle du solveur est de déterminer s’il est possible
de gagner à partir d’un état du jeu donné. En cas de réponse positive, le solveur doit aussi fournir
une solution à la grille, c’est-à-dire une liste des coups à jouer pour arriver à la victoire.
param: plateau : list
param: moutons : list de tuple
param: visite : dico
"""
moutons_tuples = moutons[0]
if victoire(plateau,moutons,nombre_herbe) :
return []
if moutons_tuples in visite :
if plateau == visite[moutons_tuples] :
return None
else :
visite[moutons_tuples] = plateau
if solveur(jouer(plateau,moutons,'Left'),moutons,nombre_herbe,visite) == [] :
return ['Left'] + solveur(jouer(plateau,moutons,'Left'),moutons[1:],nombre_herbe,visite)
if solveur(jouer(plateau,moutons,'Right'),moutons,nombre_herbe,visite) == [] :
return ['Right'] + solveur(jouer(plateau,moutons,'Right'),moutons[1:],nombre_herbe,visite)
if solveur(jouer(plateau,moutons,'Up'),moutons,nombre_herbe,visite) == [] :
return ['Up'] + solveur(jouer(plateau,moutons,'Up'),moutons[1:],nombre_herbe,visite)
if solveur(jouer(plateau,moutons,'Down'),moutons,nombre_herbe,visite) == [] :
return ['Down'] + solveur(jouer(plateau,moutons,'Down'),moutons,nombre_herbe,visite)
return None
+0
-0