一、實驗內容
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 地圖的情況...