![]()
![]()
# 迷宫
maze = [
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 0, 1, 1, 1, 1, 0, 1, 1, 1],
[1, 0, 1, 1, 1, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 1, 0, 1, 1, 1, 1],
[1, 0, 1, 0, 1, 0, 1, 1, 0, 1],
[1, 1, 1, 1, 1, 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 maze_path(x1, y1, x2, y2):
"""
:param x1: 起点横坐标
:param y1: 起点纵坐标
:param x2: 终点横坐标
:param y2: 终点纵坐标
:return:
"""
global nextNode
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)
return True
for dir in dirs:
nextNode = dir(curNode[0], curNode[1])
# 如果下一个节点能走
if maze[nextNode[0]][nextNode[1]] == 0:
stack.append(nextNode)
maze[nextNode[0]][nextNode[1]] = 2 # 2表示为已经走过的地方
break
else:
maze[nextNode[0]][nextNode[1]] = 2
stack.pop() # 在找不到路走的情况下,进行回退上一节点
else:
print("没路")
return False
maze_path(1, 1, 6, 8)