2.普利姆算法生成随机迷宫

1.最小生成树普利姆算法

  ①对于一个带权联通图,从图中任意某一点v开始,在所有与v的相邻边中找到权值最小的一条边,将这条边加入到已找到边的集合,并且将与这条边相连的另一个点w加入到最小生成树中;

  ②然后继续从已找到的点v和w的所有相邻边中找出权值最小的边,并把改这条边加入到已找到边的集合,将与这条边相连的另一个点加入到最小生成树;

  ③重复上述操作,直到遍历完所有的点。注意不可形成回路!也就是所有的点只能访问一次!

2.迷宫生成遍历墙算法思想

  ①一开始,所有的网格的所有墙都保留;

  ②随机选择一个网格,将这个网格加入到遍历过的网格列表里,每个网格仅遍历一遍。然后将这个网格的四面墙加入到候选墙列表中;

  ③在候选墙列表中随机选取一面墙x,根据这面墙分割的两个网格A,B,进行如下判断:

如果这两个网格仅有一个A在遍历过的网格列表中,那就移出这面墙x(值变为1),同时把x移出候选墙列表,并把另一个网格B加入到遍历过的网格列表,再把网格B周围值为0的墙添加到候选墙列表;

如果A,B都在遍历过的网格列表里,则保留它们之间的墙x,并在候选墙列表中删除x。

  ④重复上面过程,直到候选墙的列表为空。

3.迷宫生成遍历网格思想

与遍历墙类似,相当于把墙增宽到与网格同宽,因此可采用(2A+1)*(2B+1)的二维数组形式来描述迷宫。用1代表墙,0代表路。

  ①首先把所有网格都视为墙,也就是二维数组所有元素初始值为1;

  ②将行、列索引都是奇数(也就是原本为路的网格)中随意选择一个网格,并将其周围原本是路(索引差为2)的网格加入到候选网格列表中;

  ③在候选网格中,随机选取一个网格x,然后对x周围原本为路的网格进行判断:

如果x周围原本为路的网格中有值为0的网格y,并且与x与y之间的墙也变为了路(0),那就直接把网格y变为0,然后把y周围原本是路的并不在候选列表中的网格加入到候选网格列表;

如果x周围的网格有值为0的网格z,但x与z之间的墙还是墙(1),那就把z和墙的值都变为0,然后把z周围原本是路的并不在候选列表中的网格加入到候选网格列表;注意若有多个符合条件的网格,随机选择其中一个打通!!

  ④重复上述步骤,直到候选列表为空。

4.实现代码,输入一个全0二维数组,返回生成的01数组。

注意:0代表墙1代表路

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值