用栈解决迷宫问题

思想

使用栈来解决迷宫问题的思想是通过深度优先搜索算法来探索迷宫中的路径。栈的特点是后进先出,这正好符合深度优先搜索的思想,即先探索一个方向直到无法继续为止,然后回溯到上一个节点,再探索其他方向。

具体来说,使用栈的思想是从起点开始,将起点入栈,然后不断从栈中弹出位置进行移动并判断是否到达终点,如果没有到达终点则继续将可移动的位置入栈,直到栈为空或者找到了终点位置。当无法继续移动时,回溯到上一个节点,继续尝试其他方向,直到找到一条通往终点的路径或者所有可能的路径都被探索完毕。

代码实现

复制代码
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):
    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  # 表示这条路,我们已经走过了
                break
        else:
            maze[curNode[0]][curNode[1]] = 2
            stack.pop()
    else:
        print("没有路")
        return False


maze_path(1, 1, 8, 8)

代码结果

相关推荐
闻道且行之16 小时前
TurboOCR:基于PP-OCRv6的极速Windows离线OCR工具,深度解析3.4GB依赖背后的技术架构
c++·人工智能·python·qt·机器学习·ocr
许彰午17 小时前
95_Python内存管理与垃圾回收
开发语言·python
骄阳如火18 小时前
Python 性能深度剖析:从“被诟病的慢”到“Rust 重塑”的拐点
python
满怀冰雪18 小时前
03-第一个 Paddle 程序:Tensor 创建、计算与设备管理
人工智能·python·paddle
QXWZ_IA18 小时前
1库1图1批是什么?千寻位置公安地图数据体系详解
科技·算法·能源·媒体·交通物流·政务
CClaris18 小时前
大模型量化从0到1(九):用 llama.cpp 把模型转成 GGUF 并跑本地推理
人工智能·pytorch·python·深度学习·llama
学编程的小虎18 小时前
SenseVoice微调
人工智能·python·自然语言处理
c2385619 小时前
Bug 猎手入门指南
c++·算法·bug
诸葛说抛光19 小时前
国内大型汽车改装展览会定展 佛山改装 佛山汽车赛事
python·汽车