用栈解决迷宫问题

思想

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

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

代码实现

复制代码
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)

代码结果

相关推荐
2401_8914821714 小时前
Python多线程与多进程:如何选择?(GIL全局解释器锁详解)
jvm·数据库·python
2401_8512729914 小时前
用Python实现自动化的Web测试(Selenium)
jvm·数据库·python
2401_8463416514 小时前
调试技巧与核心转储分析
开发语言·c++·算法
D愿你归来仍是少年14 小时前
Apache Flink Checkpoint 与 Chandy-Lamport 算法深度解析
算法·flink·apache
小陈的进阶之路14 小时前
requests接口自动化测试
python
2301_8154829314 小时前
C++安全编程指南
开发语言·c++·算法
2401_8512729914 小时前
内存映射文件高级用法
开发语言·c++·算法
Yuer202514 小时前
EDCA OS体系下的:QAS v0.1 实验框架(Python 版)
python·ai量化·edca os
yunyun3212314 小时前
C++中的观察者模式变体
开发语言·c++·算法
风酥糖14 小时前
Godot游戏练习01-第17节-状态机管理的敌人
算法·游戏·godot