使用 随机prim算法生成迷宫,效果如下:
- 随机prim迷宫生成算法思想:
1、普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。
2、将迷宫地图看作一个加权连通图,在地图上生成一条且唯一的通路,即在加权连通图里搜索最小生成树:1、让迷宫全是墙. 2、选一个单元格作为迷宫的通路,然后把它的邻墙放入列表 3、当列表里还有墙时 3.1、从列表里随机选一个墙,如果这面墙分隔的两个单元格只有一个单元格被访问过 3.1.1、那就从列表里移除这面墙,即把墙打通,让未访问的单元格成为迷宫的通路 3.1.2、把这个格子的墙加入列表 3.2、如果墙两面的单元格都已经被访问过,那就从列表里移除这面墙
- 具体实现
1、使用一个二维数组存储迷宫地图数据,另使用一个二维数组存储地图的访问标识,因为每两堵墙之间应有一条通道,因此迷宫行列值应为奇数:
2、构建一个单链表存储邻墙的地图单元:#include<graphics.h> #include<conio.h> #include<stdlib.h> #include<time.h> //行列应设置为奇数 #define L 25//每行单位数 #define W 25//每列单位数 #define R 16 bool Road[L+2][W+2];//路径状态数组,false:障碍;true:通路 bool Visit[L+2][W+2];//访问标志数组,true:已访问;false:未访问
//template<class T&g