人生,就像乙個很大的棧演變。出生時赤條條地來到這個世界,慢慢地長大,漸漸地變老,最終還得赤條條地離開世間。思路分析:
上面是乙個迷宮地圖,在地圖上,0 代表牆,1 代表通路。
迷宮是回溯法和棧的綜合應用。
下面給出完整的思路和尋路演算法:
這裡我們只研究一種情況:地圖只有一條路徑可以出去。
尋路演算法按照上下左右的順序進行遍歷和判斷。
從入口出發,按照上下左右的順序尋路,每次的路徑座標pos放到棧中,存放座標是為了方便回溯。如上圖,直到向上沒有通路了,再檢視當前位置,左,右是否有通路,實際如圖所示,沒有。那麼就取棧頂座標,回退一步,再檢視左右是否有通路。如此迴圈。
如果不停地回退,導致棧中沒有元素,這就說明回退到了迷宮入口。那麼就可以說明此迷宮沒有通路。
在迷宮中還有一點值得注意就是對是否為地圖邊界 的判斷。
下面給出核心**:
迷宮定義:
#define n 10
typedef
struct pospos;
typedef
struct maze
maze;
尋路演算法:
int checkisaccess(maze *m, pos pos)
return0;}
void mazegetpath(maze* m)
pos next = cur;
//上next._row -= 1;
if(checkisaccess(m, next) == -1)
//下next = cur;
next._row += 1;
if(checkisaccess(m, next) == 1)
//左next = cur;
next._col -= 1;
if(checkisaccess(m, next) == 1)
//右next = cur;
next._col += 1;
if(checkisaccess(m, next) == 1)
//回溯
stackpop(&s);
}printf("沒有通路\n");
}
棧的應用 迷宮
使用c 構建帶環迴路迷宮,並使用迭代法,遞迴法求出口 使用遞迴方法求迷宮的最短路徑 其實在列印最短路徑是使用佇列的話路徑就不是反著的了 pragma once includeusing namespace std include includetypedef struct pos pos class...
棧的應用之迷宮
棧是後進先出的,棧分為順序棧和鏈棧 順序棧是由一組位址連續的儲存單元構成,依次存放從棧底到棧頂的資料元素 鏈棧是一組位址可不連續的儲存單元構成,鏈棧的建立過程類似於採用前插法建立鍊錶 注意程式中棧的操作,push pop gettop 等等。網上有一段利用棧完成的程式,可以拿來欣賞一下,首先感謝一下...
棧的應用之迷宮
利用棧對迷宮求解,採用的基本方法是回溯法,其實也算是一種暴力破解吧.畢竟是將乙個乙個方塊檢驗直至終點或者棧空。入棧 當棧頂元素方塊周圍有可行方塊時,將該可行方塊入棧 出棧 當棧定元素的方塊周圍都沒有可行方塊時,出棧 有幾點需要注意 1.當棧頂元素彈出時,我們又要重新對棧頂元素周圍的方塊進行檢驗,為避...