算法简介:

  1. 生成一张网格,把网格里面的所有边都存进一个列表edgeList里面.

  2. 从(0, 0)开始,做DFS。每次DFS的时候,随机地选择四周一个没有走过的格子,凿墙过去,把道路打通。凿墙的时候,把edgeList列表中相对应的那堵墙删除掉。

  3. 将剩下的没有凿开过的墙画出来,就是一个完整的迷宫了。

import sys
import matplotlib.pyplot as plt
from random import randintWIDTH  = 60
HEIGHT = 40
sys.setrecursionlimit(WIDTH * HEIGHT)def initVisitedList():visited = []for y in range(HEIGHT):line = []for x in range(WIDTH):line.append(False)visited.append(line)return visiteddef drawLine(x1, y1, x2, y2):plt.plot([x1, x2], [y1, y2], color="black")def removeLine(x1, y1, x2, y2):plt.plot([x1, x2], [y1, y2], color="white")def get_edges(x, y):result = []result.append((x, y, x, y+1))result.append((x+1, y, x+1, y+1))result.append((x, y, x+1, y))result.append((x, y+1, x+1, y+1))return resultdef drawCell(x, y):edges = get_edges(x, y)for item in edges:drawLine(item[0], item[1], item[2], item[3])def getCommonEdge(cell1_x, cell1_y, cell2_x, cell2_y):edges1 = get_edges(cell1_x, cell1_y)edges2 = set(get_edges(cell2_x, cell2_y))for edge in edges1:if edge in edges2:return edgereturn Nonedef initEdgeList():edges = set()for x in range(WIDTH):for y in range(HEIGHT):cellEdges = get_edges(x, y)for edge in cellEdges:edges.add(edge)return edgesdef isValidPosition(x, y):if x < 0 or x >= WIDTH:return Falseelif y < 0 or y >= HEIGHT:return Falseelse:return Truedef shuffle(dX, dY):for t in range(4):i = randint(0, 3)j = randint(0, 3)dX[i], dX[j] = dX[j], dX[i]dY[i], dY[j] = dY[j], dY[i]def DFS(X, Y, edgeList, visited):dX = [0,  0, -1, 1]dY = [-1, 1, 0,  0]shuffle(dX, dY)for i in range(len(dX)):nextX = X + dX[i]nextY = Y + dY[i]if isValidPosition(nextX, nextY):if not visited[nextY][nextX]:visited[nextY][nextX] = TruecommonEdge = getCommonEdge(X, Y, nextX, nextY)if commonEdge in edgeList:edgeList.remove(commonEdge)DFS(nextX, nextY, edgeList, visited)plt.axis('equal')
plt.title('Maze')
edgeList = initEdgeList()
visited  = initVisitedList()
DFS(0, 0, edgeList, visited)
edgeList.remove((0, 0, 0, 1))
edgeList.remove((WIDTH, HEIGHT-1, WIDTH, HEIGHT))
for edge in edgeList:drawLine(edge[0], edge[1], edge[2], edge[3])
plt.show()

Python生成迷宫相关推荐

  1. 使用 Python 生成迷宫

    源代码在这里 python-maze Generate a maze using Python import matplotlib.pyplot as plt import numpy as npfr ...

  2. Python Prim 算法 生成迷宫

    之前,我们在另外一篇文章中使用Prim算法生成了一个完美迷宫,利用的是遍历网格的方法,这一次,我们要教教大家用遍历墙的方法生成,上一篇文章链接:Python Prim 算法 生成迷宫_Leleprog ...

  3. python自动寻路算法_PHP生成迷宫及自动寻路算法详解

    如何使用PHP生成迷宫以及寻路求解?本文主要介绍了PHP生成迷宫及自动寻路算法,并对PHP生成迷宫及自动寻路算法详解.希望对大家有所帮助. 本文实例讲述了PHP树的深度编历生成迷宫及A*自动寻路算法. ...

  4. python制作动图-用Python制作迷宫GIF

    原标题:用Python制作迷宫GIF 安装 可以通过PyPi安装 或者通过Git 为什么你需要这个库? 问:我是一个Python迷,并且对迷宫的生成和迷宫解决的办法非常感兴趣.我很羡慕别人能够做出生成 ...

  5. 【python教程入门学习】用Python制作迷宫GIF

    安装 可以通过PyPi安装 或者通过Git 为什么你需要这个库? 问:我是一个Python迷,并且对迷宫的生成和迷宫解决的办法非常感兴趣.我很羡慕别人能够做出生成迷宫的动画.我如何能够用Python自 ...

  6. Python实现迷宫游戏

    项目:迷宫游戏 摘要 1.引言 1.1研究的背景及意义 1.2研究的内容 2.系统结构 2.1系统的结构 2.2基本思路 3.实现代码 3.1Maze类 3.2Player类 3.3Controlle ...

  7. python设计迷宫_用Python制作迷宫GIF

    安装 可以通过PyPi安装 或者通过Git 为什么你需要这个库? 问:我是一个Python迷,并且对迷宫的生成和迷宫解决的办法非常感兴趣.我很羡慕别人能够做出生成迷宫的动画.我如何能够用Python自 ...

  8. python可视化迷宫求解_如何用 Python 制作一个迷宫游戏

    相信大家都玩过迷宫的游戏,对于简单的迷宫,我们可以一眼就看出通路,但是对于复杂的迷宫,可能要仔细寻找好久,甚至耗费数天,然后可能还要分别从入口和出口两头寻找才能找的到通路,甚至也可能找不到通路. 虽然 ...

  9. Python 制作迷宫游戏(二)——游戏窗口

    Python 制作迷宫游戏(二)--游戏窗口 上一节我们使用prime做了迷宫的底层数组,它的形式是一个二维数组. 这一节我们着手开始制作游戏窗口 使用模块 pygame 在这项迷宫游戏的制作当中需要 ...

最新文章

  1. python命令大全-深度学习中python常用命令
  2. 如何做好技术 Team Leader
  3. Spring MVC 源码-初始化阶段
  4. QT-QPainter绘制曲线等基本图形
  5. JavaScript高级之ECMASript 7、8 、9 、10 新特性
  6. linux mq脚本,Linux自动化命令工具expect
  7. 有序列表ol与无序列表ul用法
  8. Ubuntu 20.04 上安装 TeamViewer
  9. solr 配置多个entity_solr建索引优化
  10. 《李宗仁回忆录》完整版在线及电子书下载
  11. 几何分布(一种离散分布)
  12. 域名转入阿里云操作说明
  13. 随心所遇 ASP.NET助您实现网站大变脸
  14. 2D卷积和3D卷积的区别及pytorch实现
  15. 《微信公众平台应用开发实战(第2版)》一1.1 微信公众账号的注册
  16. linux解压时的tar -zxvf是什么意思?
  17. c++冒泡排序如何计算迭代次数
  18. OpenHarmony ≠ HarmonyOS
  19. C语言 十六进制与ascii码互转
  20. 2022年京东双十一iPhone14pro会降价吗?

热门文章

  1. 从写简历,到面试、谈薪酬的那些技巧和防坑指南
  2. echarts默认高亮省市区联动
  3. N-Tiers開發方式(ASP/ASP.NET、VB6/VB.NET呼叫使用COM+元件)
  4. 手写VIO学习总结(二)
  5. 国外的服务器国内可以直连吗,国内服务器和境外服务器有什么区别?
  6. 【Web技术】1064- 前端9种图片格式基础知识, 你应该知道的
  7. 计算机中容量单位B、KB、MB、GB和TB的关系
  8. 网页中为什么不显示图片
  9. 万国觉醒服务器维护,《万国觉醒》怎么换服 更换服务器方法攻略
  10. 删除文件,提示错误0x80070091