給定乙個m*n的迷宮圖,求一條從指定入口和出口的迷宮路徑。假設迷宮圖如圖所示:m=n=6的迷宮圖
為了表示迷宮,設定乙個陣列mg,其中每個元素表示乙個方塊的狀態,為0表示方塊是通道,為1表示方塊是障礙物(不可走),為了演算法方便,一般在迷宮的外圍加一條圍牆,例如上圖的迷宮表示為(由於迷宮四周加了一道圍牆,故mg陣列的行數的列數均加上2)
迷宮棧的宣告:
typedef struct // 定義資料型別
box;
typedef struct // 定義棧
sttype;
#include
#include
#include
#include
using namespace std;
typedef struct // 定義資料型別
box;
typedef struct // 定義棧
sttype;
int mg[6][6]= // 迷宮地圖
,,,,,};
void initstack(sttype *&s) // 初始化
bool push(sttype *&s,box e) // 出棧
bool pop(sttype *&s,box &e) // 進棧
bool gettop(sttype *s,box &e) // 得到棧頂元素
bool empty(sttype *s) // 判斷是否為空
bool mgpath(int xi,int yi,int xe,int ye,int road) // 具體實現查詢路徑
while(k>=1)
printf("\n");
printf("路徑長度為:%d\n",maproad);
free(st);
return true;
}find=false;
while(di<4&&!find) // 控制查詢的方向
if(mg[i1][j1]==0)find=true;
}if(find)
else
}free(st);
return false;
}int main() // 主函式
如果你理解了上述的迷宮問題,理解了具體的思路設計,那麼試試這個迷宮吧,下面的這個迷宮要求找出所有的路徑,找到最短路徑並輸出,快來動動腦哦,(趁熱打鐵,熟能生巧)相信這個難不倒聰明的你哦!!!!
棧的應用之迷宮
棧是後進先出的,棧分為順序棧和鏈棧 順序棧是由一組位址連續的儲存單元構成,依次存放從棧底到棧頂的資料元素 鏈棧是一組位址可不連續的儲存單元構成,鏈棧的建立過程類似於採用前插法建立鍊錶 注意程式中棧的操作,push pop gettop 等等。網上有一段利用棧完成的程式,可以拿來欣賞一下,首先感謝一下...
棧的應用之迷宮
利用棧對迷宮求解,採用的基本方法是回溯法,其實也算是一種暴力破解吧.畢竟是將乙個乙個方塊檢驗直至終點或者棧空。入棧 當棧頂元素方塊周圍有可行方塊時,將該可行方塊入棧 出棧 當棧定元素的方塊周圍都沒有可行方塊時,出棧 有幾點需要注意 1.當棧頂元素彈出時,我們又要重新對棧頂元素周圍的方塊進行檢驗,為避...
迷宮求解(棧的應用)
最近遇到了乙個較難的演算法題 迷宮求解,剛把棧與佇列學完,看完題面之後感覺有點想法,卻又一頭霧水。有些問題看著簡單但執行起來很難,而有些問題看上去很難但執行起來,更難。時間限制 1 sec 記憶體限制 128 mb 描述 有乙個 10 x 10 的迷宮,起點是 s 終點是 e 牆是 道路是空格。乙個...