java隨機生成迷宮(圖的深度優先遍歷)

最近經常在機房看同學在玩一個走迷宮的遊戲,比較有趣,自己也用java寫一個實現隨機生成迷宮的算法,其實就是一個圖的深度優先遍歷算法.基本思想就是,迷宮中的每個點都有四面牆,然後呢,


  1. 從任意一點開始訪問(我的算法中固定是從(0,0)點開始),往四個方向中的隨機一個訪問(每訪問到一個可訪問的點,就去掉該點的那個方向的牆),被訪問點繼續以這種方識向下進行訪問。
  2. 對每個被訪問的點都被標識爲已訪問,當一個點對某個方向進行訪問時我們首先會判斷被訪問點是否已被訪問,或者觸到邊界.如果該點四個方向皆已訪問或已無法訪問,就退回上一個點。上一個點繼續這個過程。

 

這樣一次遍歷下來,可以確定每個點都被訪問過,而且由於每次訪問的方向都是隨機,這就會形成許多不同遍歷情況,同時每兩個點之間的路徑是唯一,也就形成不同的迷宮,且是起點到終點只有唯一路徑,這是由於圖的深度遍歷算法的特點所決定的。算法的實現上,主要是利用棧,第一次,先把第一個點壓進棧裏,每訪問到一個點,就把該點壓進棧裏,我們再對棧頂的點進行四個方向的隨機訪問,訪問到新點,又把新點壓進去,一旦這個點四個方向都無法訪問了,就讓該點退棧,再對棧頂的點的四個方向進行訪問,以此類推,直到棧裏的點都全部退出了,我們的遍歷就成功了,這是一個遞歸的過程,這個算法自然可以用遞歸的方法來實現,不過這裏我這樣做,而是手工用一個數組作爲棧來實現,呵呵~~說了這麼多,也不知道自己要表達的有沒表達出來。不過我感覺我的具體代碼設計還是寫的不好,還有很多地方缺乏完善和優化,權當是算法練習,以下是兩個關鍵類的核心代碼,至於表示層的代碼就不貼出來了,因爲那些都很瑣碎。有空時把它完善爲一個迷宮遊戲,發上來賺資源分,呵呵

 

下面是效果圖:

 

maze截圖 

迷宮的類:

 

 

迷宮點的類 :

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章