迷宮求解
小組成員
1.問題提出:
利用棧結構實現迷宮求解問題。
迷宮求解問題如下:
心理學家把乙隻老鼠從乙個無頂蓋的大盒子的入口趕進迷宮,迷宮中設定很多隔壁,對前進方向形成了多處障礙,心理學家在迷宮的唯一出口放置了一塊乳酪,吸引老鼠在迷宮中尋找通路以到達出口,測試演算法的迷宮如下圖所示:
2.問題分析及演算法設計:
1.迷宮中有障礙物的地方設定為1,沒有障礙物的地方設定為0;
2.設起點下標為(1,1),終點下標為(10,8);
3.從起點出發(起點入棧), 棧中存放走過的路徑(座標);
4.每次取棧頂元素,在其上下左右中選乙個能走通的且沒有走過的點入棧;
5.若該點為終點;則結束,輸出路徑;
6.若上下左右都不通或已走過, 則出棧, 棧空, 則走不通。
3.程式設計:
4.使用者手冊:
1. 執行程式;
2. 根據提示,在「請輸入迷宮矩陣,<10*10>:」後輸入迷宮矩陣;
3. 按enter鍵,根據提示,在「請輸入起始點<0~9>:」後輸入起始點;
4. 按enter鍵,根據提示,在「請輸入結束點<0~9>:」後輸入結束點;
5. 按enter鍵,即可得出最短路徑的長度和最短路徑的座標表示;
6. 關閉操作視窗,結束執行。
7. 附圖例:
5.除錯報告:
6.附錄:程式**:
#include
using namespace std;
struct point
;void copy(point &a, point &b)
struct queue
;void append(queue &d, point p)
void delete(queue &d,point&a)
struct stack
;void push(stack &s, point p)
void pop(stack &s)
class maze
;void main()
m.i++;
}cout<<"最短路徑的長度為:"<< m.i-1 < cout<< "最短路徑為:" < while (a.pre>=0)
push(s,m.p0);
while (s.head>0)
}void maze::initp0()
void maze::initpn()
void maze::initm()
}void maze::pdp0pn()
void maze::kz(queue &q,point a)
if (m[a.x +1][a.y] != 1 && a.x+1 <=9)
if (m[a.x ][a.y-1] != 1 &&a.y - 1 >= 0)
if (m[a.x ][a.y+1] != 1 && a.y+1<=9)
}/*1 1 1 1 1 1 1 1 1 1
1 0 0 0 1 1 0 0 1 1
1 0 1 0 0 1 1 0 0 1
1 1 0 0 0 0 0 1 1 1
1 0 0 1 0 0 1 0 0 1
1 0 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1*/
迷宮資料結構
實驗報告 題目 設計乙個程式,對任意設定的迷宮,求出一條從入口到出口的通路,或得出沒有通路的結論。一 需求分析 1.以二維陣列maze n n 表示迷宮,陣列中以元素值0表示通路,1表示障礙,限定迷宮大小n 100。2.第一行的資料為迷宮的行數m和列數n 從第2行到第m 1為迷宮值,同一行兩個數字之...
資料結構迷宮問題
base.h 公用的常量和型別 include include include include 函式結果狀態 define true 1 define false 0 define ok 1 define error 0 define infeasible 1 define overflow 2 t...
資料結構上機實習報告
班號 116112 姓名 李旭 學號 20111003534 實習報告 實習一 線性表及其應用 n n 20 的階乘 問題描述 大數運算 計算n的階乘 n 20 基本要求 1 資料的表示和儲存 1.1 累積運算的中間結果和最終的計算結果的資料型別要求是整型 這是問題本身的要求 1.2 試設計合適的儲...