Partage
  • Partager sur Facebook
  • Partager sur Twitter

Solitaire

solution par backtracking

Sujet résolu
    6 avril 2011 à 16:09:04

    Bonjour,

    j'ai un projet à rendre pour vendredi, et ça fonctionne pas :-° En fait, on doit générer une solution au jeu du solitaire (pas les cartes, les pions) par backtracking mais j'arrive pas à faire la fonction qui va chercher les solutions..

    def jouer(self):
            if self.countPieces()==1 and self.x==self.xd and self.y==self.yd:
                return True
            else:
                for dep in [(0,+2),(+2,0),(0,-2),(-2,0)]:
                    print (dep)
                    if self.sauter(self.x,self.y,self.x+dep[0], self.y+dep[1]):
                        print ('x')
                        print (self.sauter(self.x,self.y,self.x+dep[0], self.y+dep[1]))
                        self.sauter(self.x,self.y,self.x+dep[0], self.y+dep[1])
                        self.solution[self.countpieces()]=self.tableau.deepcopy()
                        if solution_meilleur:
                            self.jouer()
                        #démolir solution --> antisauter???
    



    Je ne vois déjà pas comment définir où commencer, alors j'ai mit self.x et self.y à 0 et 0... J'explique mes fonctions : sauter retourne True si le déplacement est valide et effectue le déplacement sur le tableau. J'ai une fonction antisauter qui fait le contraire. self.xd et seld.yd , c'est la position de l'emplacement où le dernier pion doit se trouver à la fin.

    self.countpieces(), c'est une fonction qui compte le nombre de pièce restantes dans le tableau.

    Quelqu'un pourrait jeter un oeil et me donne des pistes? Merci !
    • Partager sur Facebook
    • Partager sur Twitter
    « Il ne faut vouloir ni enjoliver ni excuser le christianisme : Il a mené une guerre à mort contre ce type supérieur de l'homme, il a mis au ban tous les instincts fondamentaux de ce type, il a distillé de ces instincts le mal, le méchant : — l'homme fort, type du réprouvé. » - Nietzsche
    Anonyme
      6 avril 2011 à 16:53:49

      Bon il y a fallu que je joue un peu au solitaire, je ne connaissais pas.

      Pour moi je dirais les cases vides représente 0 et les cases pleines 1 dans ta liste.

      je comprend pas trop bien où tu veux en venir avec ton code, mais à mon humble avis je suppose en ayant joué un peu que le code avec un peu plus d'organisation devrait être plus lisible.

      Le plus complexe dans ton code sera sans doute de déterminer quand il n'est plus possible de jouer.

      • Partager sur Facebook
      • Partager sur Twitter
        6 avril 2011 à 17:01:31

        Ben, il faut que je dise quand quand il y a eu n-1 déplacements au maximum, c'est trop. J'ai mit un self.dep dans le constructeur qui est un compteur. je l'incrémente à chaque sauter et le décrémente dans antisauter =/ Ensuite, si tous les sauter possible retourne faux, c'est fini, il ne peut plus y avoir d'appel récursif donc on fait antisauter et on revient en arrière, non?

        Je n'arrive vraiment pas à faire un code pour ça =/ pourtant on m'a dit que la solution sans optimisation était courte =/ (genre ce que j'ai fait.) Je galère sur ce code depuis vendredi passé...
        • Partager sur Facebook
        • Partager sur Twitter
        « Il ne faut vouloir ni enjoliver ni excuser le christianisme : Il a mené une guerre à mort contre ce type supérieur de l'homme, il a mis au ban tous les instincts fondamentaux de ce type, il a distillé de ces instincts le mal, le méchant : — l'homme fort, type du réprouvé. » - Nietzsche

        Solitaire

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown