深度优先搜素构建迷宫
效果展示
基本思想
不论是DFS,BFS还是RFS,这些算法生成的迷宫本质上是一个二维矩阵网络形式的生成树,也就是说其中没有回路,同时从右上角的起点到迷宫中的每一点都有且仅有一条路径,当然,到终点的路径也是唯一的。
深度优先遍历总是从当前最长的路径的末端随机选择一个可扩展点进行扩展,如果出现回路或者抵达边界,那么就回溯到最近的一个可扩展分枝。这种算法生成的迷路分枝相对较少,路径也更长更曲折。
函数详解
一、界面初始化
import pygame
import sys
import math
import random
#(1,1)(1,2)行列
# pygame 初始化
pygame.init()
# 设置棋盘大小,DFS规定必须是奇数,每一个奇数的格子必须是节点
chess_number=89
IF_RANDOM_START_END=0#是否随机终点和起点
TICK=100
BG=(144,136,145)#背景色
LINECOLOR=(112,73,46)#网格色
STARTCOLOR=(253,176,36)#起点格子的颜色
ENDCOLOR=(224,90,9)#终点(224,90,9)橙色 (252,61,63 )大红
WALLCOLOR=(33,41,48)#墙壁的颜色
#迷宫在画布上显示的位置
START_POS=(50,50)
START_POSX=50
START_POSY=50
CELL_LENGTH=int(600/chess_number)#每个格子的像素大小
LINE_WIDTH=3#线的宽度
BIAS=5#中心偏差,取奇数,起点和终点离对角线的距离
# 设置背景框大小等pygame初始化操作
size = width, height = 2*START_POSX+chess_number*CELL_LENGTH,2*START_POSY+chess_number*CELL_LENGTH
clock = pygame.time.Clock()
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Ace Cheney made")
if IF_RANDOM_START_END==1:
# 设置起始位置
start_posx=random.randint(0,chess_number-1)
start_posy=random.randint(0,chess_number-1)
# 设置终点始位置
end_posx=random.randint(0,chess_number-1)
end_posy=random.randint(0,chess_number-1)
else:
# 设置起始位置