7054| 2
|
[项目分享] 用Prim做个迷宫,今后在幼儿园门口横着走 |
当你凝视深渊的时候,深渊也在凝视你 当你路过迷宫的时候,迷宫说大爷来玩啊 单纯的热血少年对厚黑的社会迷宫往往是藐视的,他们总觉得自己在脑瘫作者设计的迷宫里可以横刀立马站着把奖品拿了,但现实往往是踏进迷宫的那一刻才发现原来没有关系,自己可能连跪着把钱退了的机会都没有。 迷宫不单承载着一代人的童年,同时也往往是市政公园的头牌,与歼5(米格15)与T34一起成为市政公园的头号NPC,吸引着无数孩子来他们便觐见。他们一起一起见证了一代人的成长。 想到现在每天快乐的生活,所以为什么不做个迷宫给自己成长成长呢 科普时间 Prim 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。该算法于1930年由捷克数学家沃伊捷赫·亚尔尼克(英语:Vojtěch Jarník)发现;并在1957年由美国计算机科学家罗伯特·普里姆(英语:Robert C. Prim)独立发现;1959年,艾兹格·迪科斯彻再次发现了该算法。因此,在某些场合,普里姆算法又被称为DJP算法、亚尔尼克算法或普里姆-亚尔尼克算法。 我知道大多数人没看懂,因为我第一次看也觉得自己可能是个文科生,但是为你勇敢的看下去点赞。 给大家一个有画面感的解释,大家就把他当作是在一个点的四周不断破壁,找到新的出路,然后继续在新出现的点三周,进一步破壁。。。。 也就是说他是个头很硬的算法 今天我们来用这个铁头娃做一个撞出一片迷宫 说下我的思路 1、首先生成一个迷宫,同时用列表来记录每个迷宫最小单元(我叫它“块”)的状态和序号 2、然后选择一个出发点,利用Prim不断地进行判断,把四周只有一条路的块都加入待处理墙壁的列表,对他们进行改造。因为不断地改造,会出现新的符合条件的块,我们用来处理待处理墙壁的列表就在不断的进行收集,改造,删除改造好的。同时对标在我们初始生成的那个列表上,修改每一块的状态。 3、等带改造的列表没有剩余,我们利用新生成的初始列表来生成迷宫,就大功告成了。 好的,让我们动起来吧 1、 首先创建一个皇帝的迷宫,同列表记录下来每个迷宫最小单元的编号和状态。 我用1表示墙,0表示路。解释一下为什么不开始就生成一个全是墙的迷宫。反正之后生成的每一块都会有自己的想法,开始追求自己独立的人格,选择是做一面考验人性的墙,还是做引导方向的路,那我们就没必要多此一举。并且开始就生成还特别的慢。 2、 默认第一个点为出发点,然后开始逐点监测,从上下左右4个方向查这个点的户口。这里要特别说明一下,作为上过毛概的三好青年,我们一定要注意避免极左、极右、妄自菲薄和夜郎自大。也就是注意找到迷宫最外侧的一圈,选择适合他们的筛选方法。 3、 通过上一步,我们已经有了第一个点的家谱,我们要解决的就是顺藤摸瓜,一查到底。先把第一个点周边的墙(高达两个)都加入稍后需要处理的墙里。随机找出一个墙开始查户口。 4、 然后就是套娃环节。我们每选择一个点A,检查他的周边情况。如果他相邻的四个块只有一条是路,那就说明再走就是思路了,我们需要对他心理疏导,让A的状态值变成0(路),然后把A的户口本上的墙加入到待处理的墙,准备用圣光指引他的周边墙,并在待处理的墙里删除A。 还有一种A心境豁达,不会有突然的自我,四周有不止一条的路,那我们没必要辅导他了,直接让他离开待处理墙的列表就可以了。 还还有一种A,在这个男多女少对象难找的世界因为边缘化已经自闭了,四周都是墙,只想做一个孤独的赢家。我们要学会尊重他,将他直接从待处理删除。 之后就是不断地改变,添加,删除。一带一路真香。 PS为什么说是边缘化?放个简单的图说明下右下角的方块无奈的处境。虽然是随机选择待处理的墙,但是趋势终究还是从左上到右下,有兴趣的各位可以把初始点设成两个或者放在中间看看效果。 5、 完成了所有待处理墙的处理,此刻我们记录的所有点的状态已经变成了 6、我们按照序号和状态开始生成生成最终的迷宫就可以了 视频之后补,B站审核特别的快,估计等柯南完结就可以发出来了 -------------------------------------------------------------------------------------------------------20200506 |
73.51 KB, 下载次数: 3011
程序
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed