C 语言 随机prim算法 生成迷宫

本文介绍了如何利用C语言实现随机Prim算法来生成迷宫。首先,阐述了Prim算法在图论中的作用,即将加权连通图转化为最小生成树。接着,将迷宫视为一个加权连通图,确保只有一条通路。具体实现包括使用二维数组存储迷宫和访问标识,建立邻墙单元的单链表,并通过随机Prim算法生成迷宫地图,最后绘制出生成的迷宫。
摘要由CSDN通过智能技术生成

使用 随机prim算法生成迷宫,效果如下:

  • 随机prim迷宫生成算法思想:

    1、普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。

    2、将迷宫地图看作一个加权连通图,在地图上生成一条且唯一的通路,即在加权连通图里搜索最小生成树:
    1、让迷宫全是墙.
    2、选一个单元格作为迷宫的通路,然后把它的邻墙放入列表
    3、当列表里还有墙时
    	3.1、从列表里随机选一个墙,如果这面墙分隔的两个单元格只有一个单元格被访问过
    		3.1.1、那就从列表里移除这面墙,即把墙打通,让未访问的单元格成为迷宫的通路
    		3.1.2、把这个格子的墙加入列表
    	3.2、如果墙两面的单元格都已经被访问过,那就从列表里移除这面墙
  • 具体实现

    1、使用一个二维数组存储迷宫地图数据,另使用一个二维数组存储地图的访问标识,因为每两堵墙之间应有一条通道,因此迷宫行列值应为奇数:
    #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:未访问
    2、构建一个单链表存储邻墙的地图单元:
    //template<class T&g
  • 14
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值