生成迷宮的深度優先遍歷演算法的非遞迴實現

2021-08-02 13:38:38 字數 1387 閱讀 7555

生成一張二維單路徑迷宮圖,可以想到的方法之一就是圖的遍歷。因為單路徑顧名思義就是要求每個節點能切只能訪問一次,這正好和圖的遍歷方法一樣。其次就是圖的遍歷保證了只有一條路徑。

執行後即如下圖所示:

①首先建立乙個二維陣列,char maze[h][w],其中h和w必須是奇數,建立乙個空間足夠大的棧stack[h*w];

②初始化maze將四周存入『w』(表示牆的意思),中間的存入『n'(表示還未被訪問的意思,中間的陣列共有三種狀態』n',『y':已經被訪問,』r':將要被訪問)

③開始從maze[1][1]進行迴圈,首先判斷可以訪問的方向,然後隨機產生乙個方向,進行入棧,如果沒有可以訪問的方向則開始出棧,直到棧為空,跳出迴圈。

#include #include #include #include #define h 11//高

#define w 11//寬

#define max 121//棧的深度h和w的乘積

typedef struct path path;

void inimaze(char maze[h][w])//初始化函式

head++;

stack[head].x = i;

stack[head].y = j;

} //這乙個if語句目的是隨機訪問下乙個節點

if (m == -1)

//如果m=-1;說明走投無路開始退棧 }}

void print_maze(char maze[h][w])

m = -1;

if (maze[p->cell.x - 1][p->cell.y] == 'y')

if (maze[p->cell.x + 1][p->cell.y] == 'y')

if (maze[p->cell.x][p->cell.y - 1]=='y')

if (maze[p->cell.x][p->cell.y+1] == 'y')

//判斷可走的方向

if (m >= 0)

}else

}p = head;

while (p != null)

printf("\n");

}int main()

深度優先遍歷演算法的非遞迴實現

深度優先遍歷演算法的非遞迴實現需要了解深度優先遍歷的執行過程,設計乙個棧來模擬遞迴實現中系統設定的工作棧,演算法的偽 描述為 假設圖採用鄰接矩陣作為儲存結構,具體演算法如下 cpp view plain copy print 深度優先遍歷演算法的非遞迴實現需要了解深度優先遍歷的執行過程,設計乙個棧來...

深度優先 迷宮演算法

前一陣一直想寫這個程式,一直沒有有效的解決儲存路徑的問題。現在想到的辦法是用佇列儲存每個節點的下表來表示路徑。這個演算法解決問的問題是 建乙個迷宮 用矩陣表示m行,n列 期中矩陣的左上角 座標為 0,0的點 為入點,找尋到所有到 m 1,n 1 的所有不重複路徑,並列印出來。注釋如下 include...

基於c 深度優先遍歷迷宮

c 實現的深度優先遍歷迷宮,迷宮大小為20 20,簡練清楚,內涵關鍵注釋。與網上都不一樣。實現細節 stack函式不需要多說了,自己定義乙個棧,這個棧是很關鍵的,像我剛才說的,他用來記錄去過的節點,以保證不重不漏 重點是slove函式,slove 原理 遞迴出口為找到出口或者沒有出口的條件下整個地圖...