棧的應用之求解迷宮問題(棧操作)

2021-08-30 13:13:43 字數 1420 閱讀 5644

給定乙個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 牆是 道路是空格。乙個...