迷宫问题的解法主要是使用了栈来解决
有四个方向,用lambda来定义
将走过的每一步都加入到栈中
如果走的是死路,就退栈
到达了终点的话,就打印出栈中的值
具体逻辑请看代码的实现
maze = [
[1,1,1,1,1,1,1,1,1,1],
[1,0,0,1,0,0,0,1,0,1],
[1,0,0,1,0,0,0,1,0,1],
[1,0,0,0,1,1,0,0,0,1],
[1,0,1,1,1,0,0,0,0,1],
[1,0,0,0,1,0,0,0,0,1],
[1,0,1,0,0,0,1,0,0,1],
[1,0,1,1,1,0,1,1,0,1],
[1,1,0,0,0,0,0,0,0,1],
[1,1,1,1,1,1,1,1,1,1]
] #迷宫本体
dirs = [
lambda x,y:(x+1,y), #下
lambda x,y:(x-1,y), #上
lambda x,y:(x,y-1), #左
lambda x,y:(x,y+1) #右
] #四个方向
def solve_maze(x1,y1,x2,y2):
stack = [] #建立一个抽象栈
stack.append((x1,y1)) #加入第一个点
maze[x1][y1]=2 #2表示已经走过的路
while len(stack) > 0: #当栈不空时
cur_node = stack[-1] #栈倒数第一个值(栈顶的值)
if cur_node==(x2,y2): #到达终点
print(stack) #将解法打印出来
return #并且return
for dir in dirs:
#next_node=dir(*cur_node)
next_node = dir(cur_node[0],cur_node[1])
if maze[next_node[0]][next_node[1]] == 0: #等于0表示可以走
stack.append(next_node) #加入栈
maze[next_node[0]][next_node[1]] = 2 #2表示走过了
break
else:
stack.pop()
else:
print('No way to go')
solve_maze(1,1,8,8)