# 迷宫 0表示路径,1表示围墙,设计算法从起点走到终点,起点是左上角的0,终点是右下角的0 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, 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] ]
思路:从起点开始,任意找下一个能走的点,当找不到能走的点时;退回上一位置,再寻找另一个能走的点。
def maze_path(x1,y1,x2,y2): # 创建一个存放路径的栈 stack = [] # 首先存放起点 stack.append((x1, y1)) # 如果stack长度为0,说明退回到起点了,没有路;否则就一直找路 while(len(stack)>0): curNode = stack[-1] # 当前的节点就是栈存放的最后一个坐标 if curNode[0] == x2 and curNode[1] == y2: # 走到终点了,将路径打印出来 for p in stack: print(p) return True # x,y 四个方向 x-1,y; x+1,y; x,y-1; x,y+1 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,8,8)