Python 迷宫算法

一文看懂Python迷宫生成和迷宫破解算法 @本文来源于公众号:csdn2299,喜欢可以关注公众号 程序员学府 今天小编就为大家分享一今天小编就为大家分享一篇Python迷宫生成和迷宫破解算法实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 文章目录 ... 阅读详情

步骤

1、创建迷宫

定义【0】为【墙】,【1】为【路】,先创建外墙,再创建内墙

# outer wall
maze=[[0,0,0,0,0,0],
      [0,1,1,1,1,0],
      [0,1,1,1,1,0],
      [0,1,1,1,1,0],
      [0,1,1,1,1,0],
      [0,0,0,0,0,0]]
# inner wall
maze[2][1]=maze[1][3]=maze[2][3]=maze[3][3]=0

这里写图片描述

2、寻路

  • 列表path记录路线
  • 列表footprint记录已经走过的路(以免重复)
  • steps表示上下左右4个可行方向
  • 起点:x=1 y=1
# the way out of maze
path=[(1,1)]
# never again
footprint=[]
# right down left up
steps=((0,1),(1,0),(0,-1),(-1,0))
# entrance
x=y=1
  • 终点:x=4 y=4
if 下一步(没有墙 & 没走过):
记录下一步 & 进入下一步
else:
返回上一步
  • path[-1]表示当前位置
while x!=4 or y!=4:
    # horizontal vertical
    for h,v in steps:
        if maze[x+h][y+v]==' ' and (x+h,y+v) not in footprint:
            path.append((x+h,y+v))
            footprint.append((x+h,y+v))
            break
    else:
        path.pop()
    # location
    x,y=path[-1]

3、绘制迷宫和路由

import random
# show the maze or the path
def show_maze(maze):
    for i in maze:
        for j in i:
            if j==0:
                print('\033[36m',j,sep='',end=' \033[0m')
            elif j=='+':
                print('\033[31m',j,sep='',end=' \033[0m')
            elif j=='O':
                print('\033[33m',j,sep='',end=' \033[0m')
            else:
                print(j,end=' ')
        print()
# build a maze which the size of maze is [n]
def build_maze(n):
    maze=[]
    # outer wall
    for i in range(n+2):
        if i==0:
            maze.append(['O']+[0]*(n+1))
        elif i==n+1:
            maze.append([0]*(n+1)+['O'])
        else:
            maze.append([0]+[' ']*n+[0])
    # random inner wall
    for i in range(1,n+1):
        if i==1:
            for j in range(n//4):
                maze[i][random.randint(2,n-1)]=0
        elif i==n:
            for j in range(n//4):
                maze[i][random.randint(1,n-2)]=0
        else:
            for j in range(n//4):
                maze[i][random.randint(1,n-1)]=0
    show_maze(maze)
    return maze
# find the exit of the maze
def route():
    maze=build_maze(9)
    # the way out of maze
    path=[(1,1)]
    # never again
    footprint=[]
    # right down left up
    steps=((0,1),(1,0),(0,-1),(-1,0))
    # entrance
    x=y=1
    while x!=9 or y!=9:
        # horizontal vertical
        for h,v in steps:
            if maze[x+h][y+v]==' ' and (x+h,y+v) not in footprint:
                path.append((x+h,y+v))
                footprint.append((x+h,y+v))
                break
        else:
            path.pop()
        # location
        x,y=path[-1]
    # show the maze and the path
    for x,y in path:
        maze[x][y]='+'
    show_maze(maze)
# play
route()

在这里插入图片描述

完整版

random迷宫,3种路由

# rectangle maze
import random,math,copy
# show the maze or the path
def show_maze(maze):
    for i in maze:
        for j in i:
            if j=='0':  # wall
                print('\033[36m',j,sep='',end='\033[0m')
            elif j=='O':  # [ entrance & exit ]& path
                print('\033[33m',j,sep='',end='\033[0m')
            elif j=='X':  # footprint
                print('\033[31m',j,sep='',end='\033[0m')
            else:
                print(j,end='')
        print()
# build a maze which the size of maze is [ n * 10n ]
def build_maze(n):
    maze = []
    # wall
    w='0'
    # entrance & exit
    e='O'
    # outer wall
    for i in range(n+2):
        if i==0:
            maze.append([e]+[w]*(n*10+1))
        elif i==n+1:
            maze.append([w]*(n*10+1)+[e])
        else:
            maze.append([w]+[' ']*n*10+[w])
    # random inner wall
    for i in range(1,n+1):
        atan=math.atan(n)
        balance=math.floor(atan**(atan**(atan+0.5)+0.5))*n
        if i==1:
            for j in range(balance):
                maze[i][random.randint(2,n*10-1)]=w
        elif i==n:
            for j in range(balance):
                maze[i][random.randint(1,n*10-2)]=w
        else:
            for j in range(balance):
                maze[i][random.randint(1,n*10-1)]=w
    show_maze(maze)
    return maze
# route optimization
def optimize(path):
    # anterior step, next step, posterior step
    anterior=0
    while anterior<len(path):
        x,y=path[anterior]
        next_step=[(x,y-1),(x-1,y),(x,y+1),(x+1,y)]
        for posterior in range(len(path)-1,anterior+1,-1):
            if path[posterior] in next_step:
                del path[anterior+1:posterior]
                break
        anterior+=1
# find the exit of the maze
def route(maze,n,option=0):
    if option==0:
        # right down up left
        steps=((0,1),(1,0),(-1,0),(0,-1))
    elif option==1:
        # right up down left
        steps=((0,1),(-1,0),(1,0),(0,-1))
    else:
        # left up down right
        steps=((0,-1),(-1,0),(1,0),(0,1))
    # the way out of maze
    path=[(1,1)]
    # never again
    footprint=[]
    # entrance
    x=y=1
    while x!=n or y!=n*10:
        # horizontal vertical
        for h,v in steps:
            if maze[x+h][y+v]==' ' and (x+h,y+v) not in footprint:
                path.append((x+h,y+v))
                footprint.append((x+h,y+v))
                break
        else:
            if path:
                path.pop()
            else:
                # There is no escape. show the maze and footprint
                for x,y in footprint:
                    maze[x][y]='X'
                show_maze(maze)
                break
        # location
        if path:
            x,y=path[-1]
    else:
        # show the maze, footprint and path
        for x,y in footprint:
            maze[x][y]='X'
        # optimize the path of maze
        optimize(path)
        for x,y in path:
            maze[x][y]='O'
        show_maze(maze)
# play
while True:
    n=input('the size of maze:').strip()
    if n.isdigit() and n!='0':
        n=int(n)
    else:
        n=19
    maze0=build_maze(n)
    maze1=copy.deepcopy(maze0)
    maze2=copy.deepcopy(maze0)
    input('Press any key to continue.')
    route(maze0,n)
    input('Press any key to continue.')
    route(maze1,n,1)
    input('Press any key to continue.')
    route(maze2,n,2)

在这里插入图片描述

python迷宫问题的所有路径_Python解决走迷宫问题算法示例 本文实例讲述了Python解决走迷宫问题算法。分享给大家供大家参考,具体如下:问题:输入n * m 的二维数组 表示一个迷宫数字0表示障碍 1表示能通行移动到相邻单元格用1步思路:深度优先遍历,到达每一个点,记录从起点到达每一个点的最短步数初始化案例:1 1 0 1 11 0 1 1 11 0 1 0 01 0 1 1 11 1... 阅读详情

相关推荐

用Python代码实现走迷宫算法

这是一个典型的搜索问题,要求寻找一条从起点到终点的路径。具体使用广度优先搜索(BFS)或深度优先搜索(DFS)等算法来解决。在搜索过程中,需要定义状态转移规则和合法状态,以及如何记录和更新搜索状态和路径信息。具体步骤如下:1.定义状态:状态可以表示为一个二元组(x, y),表示当前所在的位置坐标。

Glenseeds的博客 2734

Python——迷宫生成和迷宫破解算法

迷宫生成 1.随机PRIM 思路:先让迷宫中全都是墙,不断从列表(最初只含有一个启始单元格)中选取一个单元格标记为通路,将其周围(上下左右)未访问过的单元格放入列表并标记为已访问,再随机选取该单元格与周围通路单元格(若有的话)之间的一面墙打通。重复以上步骤直到列表为空,迷宫生成完毕。这种方式生成的迷宫难度高,岔口多。 效果: 代码: import random import numpy as np...

Eyizoha的博客 8653

走迷宫算法 用python实现

一个迷宫搜索的过程可以用python语言的算法来加以描述: 思路:穷举法。把所有的路都走了,总一条是对的。 首先老鼠不走回头路,它随便沿着一个方向一直走,遇到墙壁后换一个方向,直到没有路可以走,那么这条路就是死路。 然后,老鼠开始回退,一直回退到下一个路口,在沿着这条路一直走,以此类推,若存在到达出口的路,那么老鼠一定能走到出口。(因为最差的情况下,老鼠会把所有能走的路走一遍。) 用堆栈记录老鼠...

qq_40518671的博客 3704

python迷宫生成算法&走出迷宫算法(深度优先)

最近对迷宫算法很是着迷,随便找了个视频学习了一下,以上是迷宫生成的思路,和走出迷宫的方法,欢迎大家指正。

weixin_45458534的博客 1041

Python实现递归生成迷宫算法

Python实现递归生成迷宫算法 写一个类来储存代表迷宫的列表,包含若干方法 import random import copy class Maze: ''' scale is the size of the maze ''' def __init__(self,scale=10): self.scale = scale ''' ...

leafvein studio 叶脉工作室 579

一道走迷宫算法题python实现

前几天逛博客时看到了这样一道问题,感觉比较有趣,就自己思考了下方案顺便用python实现了一下。题目如下: 用一个二维数组表示一个简单的迷宫,用0表示通路,用1表示阻断,老鼠在每个点上可以移动相邻的东南西北四个点,设计一个算法,模拟老鼠走迷宫,找到从入口到出口的一条路径。 如图所示: 先说下我的思路吧: 1、首先用一个列表source存储迷宫图,一个列表route_stack存储路

sinly100的专栏 1万+

python prime算法迷宫生成与递归算法解迷宫,pygame可视化

prime算法生成迷宫 递归解迷宫 pygame 运行截图 prime算法生成迷宫 参考了Python 四大迷宫生成算法实现(2): 随机Prim算法这篇博客,实现还是挺简单的,博客里做了详细介绍 递归算法解迷宫 背景如下: 迷宫以二维数组表示,其中0为路,1为墙,玩家只能在路上行走,不能穿越墙。 由于逻辑比较简单,就直接自己实现了,主要思路如下: 1. 玩家初始位置定位在迷宫入口 if...

superychen的博客 2548

python基础教程:Python基于递归算法实现的走迷宫问题

@本文来源于公众号:csdn2299,喜欢可以关注公众号 程序员学府 本文实例讲述了Python基于递归算法实现的走迷宫问题。分享给大家供大家参考,具体如下: 什么是递归? 简单地理解就是函数调用自身的过程就称之为递归。 什么时候用到递归? 如果一个问题可以表示为更小规模的迭代运算,就可以使用递归算法。 迷宫问题:一个由0或1构成的二维数组中,假设1是可以移动到的点,0是不能移动到的点,如何从数组...

python函数基础教程 2047

Python Prim 算法 生成迷宫

Python Prim算法 通过遍历墙来生成迷宫,快来看看吧!

leleprogrammer的博客 1623

python迷宫问题算法_Kruskal迷宫算法的Python实现问题

我决定做一个可变大小的二叉树迷宫发生器。我试图使用克鲁斯卡尔的迷宫算法,我需要创建一个程序,看看是否有一种方法,让玩家从x细胞到y细胞。我在解决迷宫问题时遇到了困难。我决定在二叉树生成器中实现一个迷宫解算器,我已经有了一些基础知识,但是它有一些我无法解决的问题。在它从第一个单元格的中间开始,然后随机选择一个方向,并尝试向前移动到墙可能存在或不存在的位置,如果不可能移动,它会在另一个随机方向上再次尝...

weixin_35748716的博客 325

Python实现迷宫寻路算法深度解析

在探索迷宫寻路算法的世界时,Python作为一种强大的编程语言,提供了灵活的工具和丰富的库,使得复杂的算法实现变得简单而有趣。迷宫寻路算法是计算机科学中的一个重要分支,它不仅可以应用于游戏设计,还可以广泛应用于机器人导航、网络通信以及路径规划等多个领域。深度优先搜索(DFS)是一种用于遍历或搜索树或图的算法。该算法沿着树的分支进行深入,直到找到所需的节点或达到分支的末端,然后回溯到上一个节点继续搜索。在迷宫寻路问题中,我们可以将迷宫视为一个图,其中的通道是节点之间的边,而墙壁则表示节点之间没有边相连。

weixin_42372837的博客 1609

python 实现老鼠迷宫算法

老鼠迷宫算法(Rat Maze算法)是一种用于解决迷宫问题的搜索算法。它模拟了一只老鼠在迷宫中寻找出口的过程。

luthane的博客 1351

云计算系统等保测评对象和指标选取

参考GBT22239-2019《基本要求》附录D 云计算应用场景说明。简要理解下图,主要是云计算系统安全保护责任分担原则和云服务模式适用性原则,指导后续的测评对象和指标选取。

ryanzzzzz的博客 4682

python迷宫问题算法_Python解决走迷宫问题算法示例

本文实例讲述了Python解决走迷宫问题算法。分享给大家供大家参考,具体如下:问题:输入n * m 的二维数组 表示一个迷宫数字0表示障碍 1表示能通行移动到相邻单元格用1步思路:深度优先遍历,到达每一个点,记录从起点到达每一个点的最短步数初始化案例:1 1 0 1 11 0 1 1 11 0 1 0 01 0 1 1 11 1...

weixin_28940217的博客 1104

TwinCAT3 主站动态配置 PDO 的实战技巧与性能优化

本文深入探讨了TwinCAT3主站动态配置PDO的实战技巧与性能优化策略。通过对比静态PDO的局限,阐述了动态配置在提升系统灵活性、降低网络负载和保障实时性方面的核心优势。文章提供了从环境准备、代码实现到错误排查的完整流程,并重点解析了PDO映射、SDO通道区别以及分布式时钟同步等关键概念,帮助工程师掌握EtherCAT网络性能调优的核心方法。

weixin_29213525的博客 346

STM32F103C8T6 + GY-906红外测温:手把手教你用CubeMX和HAL库搞定IIC驱动(附完整工程)

本文详细介绍了如何使用STM32F103C8T6和GY-906红外测温传感器(基于MLX90614芯片)实现非接触式温度测量。从STM32CubeMX工程创建、HAL库驱动适配到温度数据采集与处理,提供完整的开发流程和常见问题解决方案,帮助开发者快速掌握红外测温技术。

weixin_29188043的博客 255

Python算法实现走迷宫及路线绘制:探索迷宫世界的秘密

Python算法实现走迷宫及路线绘制:探索迷宫世界的秘密 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在计算机科学和人工智能领域,迷宫问题是一个经典的算法问题,它不仅锻炼了逻辑思维能力,也展示了算法的巧妙应用。今天,我们要推荐的这个开源项目——Python算法实现走迷宫及路线绘制,就是这样一个将算法与可视化完美结合的项目。 项目技术分析 本项目采用Python语言,...

gitblog_06791的博客 934

MATLAB编程实战:通过SCPI命令高效读取普源示波器数据

本文详细介绍了如何利用MATLAB通过SCPI命令高效读取普源示波器数据,实现自动化测试与数据分析。文章从硬件连接到软件配置,再到核心代码编写与数据解析,提供了完整的实战指南,帮助工程师和科研人员摆脱手动操作,直接从示波器内存中精准读取数据,并利用MATLAB进行FFT频谱分析,大幅提升工作效率。

weixin_29176179的博客 547

python迷宫算法及实现_Python迷宫递归算法

所以我盯着这个有一段时间了,我不知道怎么才能回到这个迷宫的正确路径。在2代表墙MAZE = [[2,2,2,2,1,2],[2,2,1,2,1,2],[2,2,1,2,1,2],[2,1,1,1,1,2],[2,1,2,2,2,2],[2,1,2,2,2,2]]START_ROW = 5START_COL = 1END_ROW = 0END_COL = 4was_here = [[False]*6...

weixin_39526415的博客 377

FISCO-BCOS配置及使用控制台

如果因为网络问题长时间无法下载,请尝试:curl -#LO https://gitee.com/FISCO-BCOS/console/raw/master-2.0/tools/download_console.sh && bash download_console.sh。为了可以更加方便快捷,所以HelloWorld合约已经被内置了,位于控制台下面的contracts/solidity/HelloWorld.sol。用于获取和设置name的值,合约代码如下。部署成功会返回合约地址。

qq_51562644的博客 832

【React】1、React入门与概览(JSX语法)

React入门 文章目录React入门一、React全家桶1. React是什么?2. 谁开发的?3. 为什么要学?4. React的特点5. 学习React之前要掌握的JavaScript基础知识二、React 概览组件JSXVirtual DOM关于虚拟DOM:Data Flow三、React基本使用相关js库四、React JSXJSX 语法规则五、模块与组件、模块化与组件化的理解5.1 模块5.2 组件5.4 模块化5.5 组件化 一、React全家桶 React基础 React-Router(R

Coding and studying 1382

迷宫随机生成算法Python实现

迷宫随机生成算法Python实现 最近在B站看到一个关于迷宫随机生成算法的视频《从迷宫生成算法到创意编程》,受到启发,就用刚学的Python语言尝试实现了一下,代码只是模拟算法生成的过程,还没有把迷宫可视化,不过只要解决了算法问题,其余都只是细节问题,因为代码可以一键生成任意大小、难度的迷宫,而人脑是很难想象出来的。 算法过程结果目前未可视化,只是以路线的方式呈现,需要手动转化成图形。 举例如下:(为了绘制方便,只取5X5的迷宫作为示例,实际上可以任意大小) 1.运行代码生成路线: 2.绘制: 将路线串起

qq_49597570的博客 2820

第14.5章 高翔博士最新开源框架Lightning-LM源码解读(五):揭秘位姿图优化核心模块,从数学原理到代码实现

本文介绍了Lightning-LM框架中的位姿图优化(PGO)模块实现。该模块通过融合多源定位信息(激光定位、激光里程计、DR等),构建并优化位姿图来获得更精确的位姿估计。 主要内容包括: 模块概况与数据流程:初始化配置→添加PGO帧→分配位姿→优化求解→更新位姿→滑动窗口 16个核心函数详解:从构造函数到边缘化处理,涵盖完整的PGO工作流程 关键技术点:噪声参数设置、优化问题构建、约束添加、异常值处理等 关键数据结构:帧队列管理、顶点和边构建、优化统计信息收集 该PGO模块采用增量式优化方式,支持多种约束

行知SLAM 1217

Python 四大迷宫生成算法实现(1): 递归回溯算法

python迷宫生成算法实现:递归回溯算法递归回溯算法简介关键代码介绍保存基本信息的地图类算法主函数介绍代码的初始化完整代码 递归回溯算法简介 下图是算法使用的地图,地图最外围默认是一圈墙,其中白色单元是迷宫单元,黑色单元是墙,相邻白色单元之前的墙是可以被去掉的。可以看到这个地图中所有的迷宫单元在地图中的位置(X,Y),比如(1,1),(5,9)都是奇数,可以表示成(2 * x+1, 2 * y+...

marble_xu的博客 5800

高精度导航 | RTK:2025年高精度导航算法综述,包括:原理,数据,公式,完整代码,开源代码链接

中国科学院国家授时中心的最新研究表明,PPP-AR/PPP-RTK增强算法使时间传递链路的稳定性提升超过30%,模糊度固定成功率高达93.57%,首次固定时间缩短至20分钟内。当这一愿景实现,人类社会的生产效率和资源利用率将迎来革命性提升,高精度定位将成为像电力、互联网一样的基础服务,深刻重塑我们的生活方式和文明形态。PPP-RTK作为GNSS定位领域的最前沿技术,成功融合了精密单点定位(PPP)和实时动态定位(RTK)的双重优势。,实现在无GNSS信号环境下(如隧道、地下停车场)的连续厘米级定位。

尘世冰封的专栏 1613

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

python迷宫编程题_一道python走迷宫算法题

前几天逛博客时看到了这样一道问题,感觉比较有趣,就自己思考了下方案顺便用python实现了一下。题目如下:用一个二维数组表示一个简单的迷宫,用0表示通路,用1表示阻断,老鼠在每个点上可以移动相邻的东南西北四个点,设计一个算法,模拟老鼠走迷宫,找到从入口到出口的一条路径。如图所示:先说下我的思路吧:1、首先用一个列表source存储迷宫图,一个列表route_stack存储路线图,一个列表route...

weixin_39922683的博客 486

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: Python【斐波纳契】3种算法及其复杂度
下一篇: Python算法:【螺旋】矩阵
小基基o_O
博客等级 码龄9年 4414粉丝 467原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值