c 解決迷宮問題

2021-10-03 06:14:54 字數 1859 閱讀 5655

一、實驗內容

1.1 知識點

1.2 實驗環境

2.1 地圖

利用二維陣列定義乙個高 20 長 30 的地圖,同時用特殊**標記地圖的每乙個位置。比如通路設定為 0,死路設定為 1 等,在顯示地圖的時候只需要根據標記列印出地圖每個位置對應的符號。比如 0 為通路,用 「 」,兩個空格表示;1 為死路,用「■」,方塊表示。

地圖標記列表:

0:"  "            雙空格

1: ■ 方塊(通常輸入法中輸入fangkuai可查詢,下同)

2: × 叉(cha)

3: ↓ 下(xia)

4: → 右(you)

5: ← 左(zuo)

6: ↑ 上(shang)

7: ※ 星(xing)

二、實驗原理

2.2 路徑

路徑的生成需要用到深度優先遍歷的思想。

深度優先生成樹

2.3 遊戲規則

遊戲分為自動操作和手段操作:自動操作是利用深度優先演算法自動尋找路徑,直到到達出口;手動操作分為上下左右移動,分別對應w,x,a,d,需要判斷下一步操作位址進行比較,如果下一步操作可行,則移動,並且清除當前資訊,到達出口則遊戲結束。

3.2 全域性變數

在全域性變數中定義地圖,包括地圖的長和高(30 * 20),同時還需定義一些標記。

3.3 路線棧

路線棧設計來記錄移動路徑。路徑棧是乙個類,它可以記錄地圖的座標和移動軌跡。

class stack_of_maze;
成員變數(私有)

在成員變數中定義乙個資料結構來包括地圖座標和移動資訊。

//記錄迷宮座標

struct node

;node* head;

成員函式(公有)

構造和析構

stack_of_maze()

~stack_of_maze()

}

壓棧

設定乙個新節點用於插入,首先將資訊記錄到新節點中,再把新節點插入到棧頂。這個函式的功能是用於新增新的移動資訊。

void push(int xx,int yy,char ddirection)

}else

cout<<"記憶體分配失敗"<出棧

推出棧頂元素,用於判斷路徑是否正確,如果下乙個節點為空則說明路徑錯誤,前方不能通行。

node* pop(int& xx,int& yy)

return head;

}

列印

列印路徑資訊。

void print()

}else

cout<<"棧為空,列印失敗"<3.4 建立地圖

首先把地圖全置為 1,即死路,然後除了出入口和最外一層牆壁保持不變,其他位置採用隨機函式來初始化為通路 0。縱座標為 x,橫座標為 y。

void createmaze()

3.7 移動

void move()
四、執行

4.1 編譯

g++ maze.cpp -o maze
4.2 執行

./maze

C 解決迷宮問題

include include define m 11 define n 10 預設迷宮結構 char maze array m n 記錄迷宮結點的路過次數 int maze node passby array m n 輸出當前的迷宮局勢 void print maze 輸出記錄路徑結點出現次數的陣...

c解決迷宮問題

問題描述 在迷宮中求從入口到出口的一條簡單路徑。迷宮可用方塊來表示,每個方塊或者是通道 用空白方塊表示 或者是牆 用帶陰影的方塊表示 迷宮求解 這個經典的問題,應用棧這種資料結構,自己設計乙個方案,並上機實現從入口到出口的一條簡單路徑。為了表示迷宮,用二維陣列表示,如 int a 10 8 3是入口...

迷宮問題 遞迴解決

建立人 wdl 建立時間 2021 3 21 描述 public class migong 左右全部置為1 for int i 0 i 8 i 設定擋板,1表示 map 3 1 1 map 3 2 1 map 1 2 1 map 2 2 1 輸出地圖 system.out.println 地圖的情況...