兩種迷宮生成演算法

2021-06-20 22:49:18 字數 760 閱讀 9720

這裡要介紹兩種迷宮生成的演算法,recursive backtracking和eller』s algorithm。它們都生成的是perfect maze,也就是說每個區域都連通,並且沒有環的迷宮。

我們現在說recursive backtracking:

迷宮的初始狀態是牆壁都存在。選擇乙個開始區域。

隨機得選擇乙個沒有訪問過的鄰接區域,並打通與它之間的牆壁。此鄰接區域稱為當前區域。

如果所有周圍的區域都是訪問過的,則退回上乙個區域進行挖據牆壁,一直重複。

當開始的區域被退回的時候,演算法結束。

重新生成

eller』s algorithm是個節省記憶體的演算法,在迷宮寬度固定的情況下,它能夠使用固定的記憶體生成無限的迷宮。它一行一行的生成迷宮,並且生成當前行的時候,只考察上一行的資料。

步驟如下:

首先是第一行,將每個區域分別放入乙個集合。當然區域之間的牆壁都是存在的。

如果相鄰的兩個區域不在同乙個集合,則隨機得打通它們之間的牆壁(隨機意味著可以打通也可以不打通)。並且合併它們所在的集合,表示它們之間都是連通的。

對於每個區域,隨機的向下打通牆壁。並且每個集合至少要有乙個區域打通向下的牆壁。

生成下一行區域,並且將相應的區域(正好上面那個區域打通了向下的牆壁的)合併到上一行的集合。其它區域則將在它們自己的集合。這一步驟很關鍵,在這裡可以捨棄上上行的資料了,也就是剛才的集合中只要包含上一行和當前行的區域。

重複直至生成最後一行。

對於隨後一行,打通所有不在同乙個集合的鄰接區域,並忽略所有向下的牆壁。

隨機迷宮生成演算法整理分析

蒐集整理了一些遊戲迷宮生成的演算法與實現 前段時間學校遊戲開發課大作業,做了乙個roguelike的恐怖遊戲。蒐集整理了一些迷宮生成的演算法。當初也受了indienova上一些文章的啟發。現在在此把學到的一些東西理一理分享出來。第一次寫這種東西,感覺有點囉嗦,還請大家不要介意,也可以直接看專案位址 ...

C 實現4種經典迷宮生成演算法和迷宮尋路演算法(六)

在a 演算法裡面,有兩個概念,乙個是已經走過的步數g,乙個是走到目標需要的步數h。例如我從起點s出發,s的g就是0了。往右走一格到t,那t的g就是0 1 1。再走一步,就是1 1 2。反正從g g的點出發,走一格後的g就是g 1。h也很好算。例如目標是 m,n 當然格是 u,v 那麼h abs u ...

最小生成樹(兩種演算法)

ifndef min tree h define min tree h include include include include include data struct data struct.h include tool tool disjoint set.h 最小生成樹 假設圖中的頂點有n...