问题简介
算法思路:给出起点和终点,并循环每一步可能走的四个方向,寻找能走的每一步,并把每一步走过的路封死,当走到绝境时,开始回到之前的可以走的路,直到到达终点。如果没有路,则返回到起点。
代码实现
maze=[
[1,1,1,1,1,1,1,1,1,1],
[1,0,1,0,1,1,1,1,1,1],
[1,0,0,0,1,1,1,1,1,1],
[1,0,1,0,1,1,1,1,1,1],
[1,0,1,0,1,1,1,1,1,1],
[1,0,1,0,0,0,0,1,1,1],
[1,0,0,0,1,1,0,0,1,1],
[1,0,1,1,0,0,1,0,1,1],
[1,0,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 maze_path(x1,y1,x2,y2):
path=[]
path.append((x1,y1))
while len(path)>0 :
curnode=path[-1]
if curnode[0]==x2 and cuenode[1]==y2:
for p in path:
print(p)
return True
for dir in dirs:
nextnode=dir(curnode[0],cuenode[1])
if maze[nextnode[0]][nextnode[1]]==0:
path.append(nextnode)
maze[nextnode[0]][nextnode[1]]=1
break
else:
path.pop()
else:
print('没有路')
return False
maze_path(1,1,8,8)
运行结果:
(1, 1)
(2, 1)
(3, 1)
(4, 1)
(5, 1)
(6, 1)
(7, 1)
(8, 1)
(8, 2)
(8, 3)
(8, 4)
(7, 4)
(7, 5)
(8, 5)
(8, 6)
(8, 7)
(8, 8)