Я пытаюсь выполнить поиск в глубину в Python, но он не работает.
По сути, у нас есть доска для пасьянсов:
[1,1,1,1,1,0,1,1,1,1]
1 представляют колышки,и 0 это открытое место.Вы должны перемещать колышек по одному ДВУХ СЛОТОВ назад или вперед ТОЛЬКО в пустое место.Если вы перепрыгиваете через другой колышек в процессе, он становится пустым слотом.Вы делаете это, пока не останется один колышек.В общем, игра выглядит так:
[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
Вот что у меня есть:
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)
Итак, теперь мои вопросы:
- Правильно ли этоспособ выполнить поиск в глубину для этого?
- Мой алгоритм не работает !!!Это застревает.Я боролся с этим несколько дней, прежде чем спрашивать здесь, поэтому, пожалуйста, помогите.
- Похоже, я не следую за СУХОЙ, какие-либо предложения?
- Боже, помогите мне?