2014-01-12 118 views
3

我不小心將這個問題發佈到了我的另一個帳戶,所以我刪除了該帖子並轉發到此帳戶。遞歸迷宮代

所以我想創造一個有趣的迷宮生成算法,但我碰到了一些凹凸。我寫的算法放入無法訪問並且沒有退出的空間。問題是什麼?

這裏是我的意思

# # # # # # # # # # # # # # # # # # # # # 
# . . . . . # . # . . . # . # . # . . . # 
# . # # # . # . # # # . # # # . # # # # # 
# . . . # . # . # . . . . . # . . . . . # 
# # # . # . # . # # # # # . # # # . # # # 
# . . . # . # . . . . . # . # . # . # . # 
# . # # # . # # # # # . # # # . # . # . # 
# . # . # . . . . . # . . . . . . . # . # 
# . # . # . # # # # # # # . # # # . # # # 
# . # . # . . . . . . . # . . . # . # . # 
# . # . # # # # # # # . # . # . # # # . # 
# . # . # . . . . . . . # . # . # . . . # 
# # # # # . # # # # # # # . # . # . # # # 
# . # . . . # . . . . . . . # . # . # . # 
# . # # # . # . # # # # # # # # # . # # # 
# . . . # . . . # . # . . . . . . . # . # 
# # # . # # # . # # # # # # # . # # # . # 
# . # . # . . . . . # . . . # . . . . . # 
# # # . # . # # # . # . # # # . # # # . # 
# . # . . . # . # . # . # . . . . . # . # 
# # # # # # # # # # # # # # # # # # # # # 

這是我的代碼
說明:
創建完全由連接細胞的迷宮。如上所述,1向下,2向右,3向左,orientTo記錄dfs上/下/左/右是否到達當前單元格。 在mazeGen函數中:生成您來自的單元格,現在移除當前單元格和最後一個單元格之間的牆。生成當前單元格的所有鄰居,並將它們隨機排列成一個數組,數組保存x,y,以及dfs移動到哪個鄰居單元格的方式。現在遍歷這個數組並遞歸調用這些鄰居值的dfs。

+2

爲什麼你有多個帳戶? – Blorgbeard

+0

刪除,您丟失了我的評論。我會再說一遍:我沒有檢查過哪些是錯誤的,但是你的「隨機排列」可能會將相同的鄰居放入多個位置,我懷疑這是你的意圖。洗牌。 – keshlam

+0

這是一個意外,我是在程序員.stackexchange上,並且我按下了Facebook的登錄信息,它創建了一個全新的帳戶,然後這個帖子被遷移到這裏。所以我剛刪除它並重新發布。 – ultrainstinct

回答

2

我想迷宮空間(非牆壁)應該製作一棵樹。這意味着,所有連接的空間在每對空間之間只有一條路徑。

由於樹沒有循環,因此可以通過打破找到的任何循環來創建迷宮。可以通過查找週期(DFS)並將檢測週期中的任何空間設置爲牆,直到沒有周期來完成。它可以在一個DFS傳遞中完成。通過選擇不同的起始空間並隨機選擇鄰居進行創建不同的迷宮。

+0

因此,基本上洪水填滿所有的空間,如果一些部分沒有被淹沒,你選擇一個隨機的牆細胞,並打破它? – ultrainstinct

+0

是的,隨機洪泛填充空間,如果填充發現已經氾濫的細胞,然後設置牆從填充進入淹沒單元格的單元格開始 – Ante

+0

這看起來像是一個比迷宮生成算法更多的工作,是不是有辦法將這種類型的邏輯合併到dfs中呢?就像它從來沒有創建封閉空間。 – ultrainstinct