栈-迷宫问题

给一个二维列表,表示迷宫(0表示通道,1表示围墙)。给出一条走出迷宫的路径

栈-深度优先搜索,回溯法思路:使用栈存储当前路径,从一个节点出发,任意找一个能走的点,当找到不能找的点时,退回上一个点寻找是否有其他方向的点(出栈)。

复制代码
# 深度优先搜索 又称回溯法
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]
]

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):  # x1,y1表示起点,x2,y2表示终点
    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: # x,y四个方向
            nextNode = dir(curNode[0], curNode[1]) # 二维元组
            if maze[nextNode[0]][nextNode[1]] == 0:   # 如果下一个节点能走
                stack.append(nextNode)  # 则将下一个节点入栈
                maze[nextNode[0]][nextNode[1]] = 2 # 否则标记为2,2表示已经走过
                break
        else:
            maze[nextNode[0]][nextNode[1]] = 2
            stack.pop()  # 退回
    else:
        print('没有路')
        return False

maze_path(1,1,8,8)
复制代码

 

posted @   天才九少  阅读(24)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示