Profondeur d'Abord de recherche en Python

Je suis en train de faire une Profondeur d'Abord de recherche en Python, mais il ne fonctionne pas.

Fondamentalement, nous avons un peg solitaire conseil:

[1,1,1,1,1,0,1,1,1,1]

1 représente une cible, et 0 est un endroit ouvert. Vous devez déplacer un pion, un à un, DEUX FENTES vers l'arrière ou vers l'avant qu'à un endroit vide. Si vous sautez sur l'autre cheville dans le processus, il devient un logement vide. Vous faites cela jusqu'à ce qu'un peg reste. Donc en gros, un jeu va comme:

[1, 1, 1, 1, 1, 0, 1, 1, 1, 1]
[1, 1, 1, 0, 0, 1, 1, 1, 1, 1]
[1, 0, 0, 1, 0, 1, 1, 1, 1, 1]
[1, 0, 0, 1, 1, 0, 0, 1, 1, 1]
[1, 0, 0, 0, 0, 1, 0, 1, 1, 1]
[1, 0, 0, 0, 0, 1, 1, 0, 0, 1]
[1, 0, 0, 0, 0, 0, 0, 1, 0, 1] #etc until only 1 peg left

Voici ce que j'ai:

class MiniPeg():
    def start(self):
        ''' returns the starting board '''
        board = [1,1,1,1,1,0,1,1,1,1]
        return board

    def goal(self, node):
        pegs = 0

        for pos in node:
            if pos == 1:
                pegs += 1

        return (pegs == 1) # returns True if there is only 1 peg

    def succ(self, node):
        pos = 0
        for peg in node:
            if peg == 1:                
                if pos < (len(node) - 2):  # try to go forward
                    if node[pos+2] == 0 and node[pos+1] == 1:
                        return create_new_node(node, pos, pos+2)

                if pos > 2: # try to go backwards 
                    if node[pos-2] == 0 and node[pos-1] == 1:
                        return create_new_node(node, pos, pos-2)
        pos += 1

def create_new_node(node, fr, to):
    node[fr] = 0
    node[to] = 1
    if fr > to:
        node[fr-1] = 0
    else:
        node[fr+1] = 0
    return node

if __name__ == "__main__":
    s = MiniPeg()
    b = s.start()

    while not s.goal(b):
        print b
        b = s.succ(b)

Donc, maintenant mes questions:

  1. Est-ce la bonne façon de faire de la Profondeur d'Abord rechercher ce?
  2. Mon algorithme ne fonctionne pas!!! Ça coince. J'ai eu du mal sur ce pendant des jours avant de demander ici, donc s'il vous plaît aider.
  3. On dirait que je ne suis pas suite à SEC, des suggestions?
  4. omg m'aider?

OriginalL'auteur y2k | 2010-01-26