思路:
1.从起始位置开始向四个方向搜索,有路可走的点入栈;
2.遇到走不通的点,则进行标记,表示已经搜索过,并且返回上一个顶点再次搜索
3.不符合的则出栈,最后在栈里的则是路径
代码如下;
##栈解决迷宫问题
##四个方向
dirs=[
lambda x,y:(x-1,y),
lambda x,y:(x,y+1),
lambda x,y:(x+1,y),
lambda x,y:(x,y-1)
]
def maze_find(l,x1,y1,x2,y2):
stack=[]##建立栈
stack.append((x1,y1))##建立元组记录坐标
while len(stack)>0:
now_node = stack[-1]
if now_node[0]==x2 and now_node[1]==y2:##到达终点
for path in stack:
print(path)
return True
for dir in dirs:##四个方向走
next_node=dir(now_node[0],now_node[1])
if l[next_node[0]][next_node[1]]==0:
stack.append(next_node)
l[next_node[0]][ next_node[1]] =2
break##找到一个就可以走
else:##四个方向都不可以走 出栈 寻找上一个顶点
l[now_node[0]][now_node[1]] =2
stack.pop()
else:##没有出路
print("世界上本来没有路,但是走的人多了便有了路!")
return False
if __name__ == '__main__':
##0表示可以走 1表示不可以走
l=[
[1,1,1,1,1,1,1],
[1,0,0,0,0,0,1],
[1,0,0,0,1,1,1]
]
maze_find(l,1,1,2,3)