搜索四个方向能走的点
不能走,回退上一个点
走过的路放在栈里,一个点一个坐标,能走的放到栈里,如果走到一个点,没有路了,标记下不能走了,往回退出栈
这样以此类推
maze = [
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 0, 0, 1, 0, 0, 0, 1, 0, 1], #这是 1,1
[1, 0, 0, 1, 0, 0, 0, 1, 0, 1],
[1, 0, 0, 0, 0, 1, 1, 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)
]
//x1和y1 是起点的位置 x2和y2是终点的位置
def maze_path(x1,y1,x2,y2):
#空栈
stack = []
#起点坐标
stack.append((x1, y1))
#栈空了就是没有路了
while(len(stack)>0):
#当前节点 ,继续能走,栈顶就是新的下一个节点,看下一个能不能走了
curNode = stack[-1]
if curNode[0] == x2 and curNode[1] == y2:
#走到终点
for p in stack:
print(p)
#有路返回true
return True
#0是x 1是y
for dir in dirs:
#下一个节点
nextNode = dir(curNode[0],curNode[1])
#如果下一个节点能走
if maze[nextNode[0]][nextNode[1]] == 0://=0是能走
//能走压入栈中
stack.append(nextNode)
maze[nextNode[0]][nextNode[1]] = 2 #2表示为已经走过了
//能走还需要找其它方向吗 不用了就break
break
else: #一个都没有找到,四个方向,没有路了,回退栈
#虽说一个都没有找到,标记走过了,已经走过了, 之前走的就不会在走了
maze[nextNode[0]][nextNode[1]] =2
#回退,出栈 ,出栈就看他前一个值,是不是能走,走过为2,就不会在走了
stack.pop()
else:
print("没有路")
return False
maze_path(1,1,8,8)