用栈解决迷宫问题

时间:2021-08-04
本文章向大家介绍用栈解决迷宫问题,主要包括用栈解决迷宫问题使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
#  迷宫 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)

原文地址:https://www.cnblogs.com/dzwclimber/p/15098282.html