迷宮自動生成程式

2021-06-22 20:22:24 字數 995 閱讀 9124

這學期開始時本來打算寫個自動生成迷宮的程式。但當時水平所限,寫不出來。假期這兩天把這個想法付諸實施,現在想想這個程式挺有意思的。

程式和道理都非常簡單,有些類似於走迷宮。

思路是這樣:

1.首先假設迷宮場地是充滿牆壁沒有道路的。我們的工作其實就是把迷宮「挖」出來。不妨把開始時的迷宮看成一些小的「房間」,每個「房間」四面都被牆壁包圍。畫迷宮的過程實際就是從乙個房間隨機走到另乙個房間,走的過程中把牆壁「挖掉」。定義乙個類,這個類的每個物件代表迷宮裡的乙個格仔,裡面存放了這塊牆壁或房間是否被挖過,以及它是否是乙個「房間」。選好乙個房間作為起點(我選的左上角),然後開始隨機挖。

2.到達乙個房間時判斷四周房間的情況。按照四個方向判斷。如果其中乙個方向的隔壁房間挖過了,就不要把這個方向記錄下來。如果四周都不能挖了,就一路退回之前能挖的地方。再次隨機乙個新方向,繼續挖。(有點類似走迷宮的過程)

程式中記錄道路用了c++stl裡的棧。

#include #include #include #include #include #define m 25 //迷宮的規模

using namespace std;

class grid;

//迷宮格仔型別,記錄了是否被挖過

grid maze[m][m];

stackrow_s, col_s;

//用來存放路徑的棧

void init(){

for(int i=0; idirlist; //用來記錄可選擇的方向

int result=0;

int row=row_s.top(), col=col_s.top();

//0 up, 1 down, 2 left, 3 right

if(row-2>0 && !maze[row-2][col].dig) dirlist.push_back(0);

if(row+20 && !maze[row][col-2].dig) dirlist.push_back(2);

if(col+2

迷宮求解(自動生成)

主函式測試例項 棧的順序儲存表示 define stack init size 100 儲存空間初始分配量 define stackincerment 10 儲存空間分配增量 typedef bool status typedef struct sqstack 基本操作的函式原型說明 status ...

生成迷宮的程式

private sub form click 10 szx 5000 szy 5000 tr 20 l 50 mx szx l my szy l dim a 1001,1001 goto 110 20 while not x 2 and y 1 30 if a x 1,y a x,y 1 a x,y...

C 自動生成迷宮遊戲

運用並查集自動生成迷宮地圖,並運用佇列和棧尋找迷宮通路並列印出來 incaighfalrtlude include include include include using namespace std using std queue using std stack typedef struct p...