用栈解决迷宫问题

思想

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

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

代码实现

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

代码结果

相关推荐
Cloud_Shy61817 分钟前
Python 数据分析基础入门:《Excel Python:飞速搞定数据分析与处理》学习笔记系列(第九章 Excel 自动化 下篇)
python·数据分析·excel·numpy·pandas
AI机器学习算法1 小时前
机器学习基础知识
数据结构·人工智能·python·深度学习·算法·机器学习·ai学习路线
2301_809204703 小时前
bootstrap怎么实现鼠标悬停切换图片预览功能
jvm·数据库·python
小徐学编程-zZ7 小时前
量产测试数据
python·压力测试·数据库架构
QQ8057806517 小时前
django基于机器学习的电商评论情感分析系统设计实现
python·机器学习·django
X journey8 小时前
机器学习进阶(13):支持向量机SVM
算法·机器学习·支持向量机
wx09098 小时前
stata实现机器学习的环境配置
python·机器学习·stata
洛水水8 小时前
【力扣100题】30.二叉树的直径
算法·leetcode·职场和发展
gihigo19989 小时前
Bezier曲线曲面生成算法
算法
平行侠9 小时前
024多精度大整数 - 突破硬件精度限制的任意精度运算
数据结构·算法