求迷宮中從入口到出口的所有路徑是乙個經典的程式設計問題。由於計算機解決迷宮問題時,通常用的是「窮舉求解」的方法,即從口出發,順某方向向前探索,若能走通,則繼續往前走;否則沿原入口路退回,換乙個方向再繼續探索,直至所有可能的通路都探索到為止。為了保證在任何位置上都能沿原路退回,顯然需要用乙個後進先出的結構來儲存從入口到當前位置的路徑。因此,在求迷宮通路的演算法中應用棧。
程式中,建立二維陣列為迷宮,0為牆壁,1為可以通行的道路。
演算法的基本思想是:若當前位置「可通」,則納入「當前路徑」,並繼續朝「下一位置」探索,即切換「下一位置」為「當前位置」,如此重複直到出口,若當前位置「不可通過」,則應順著「來向」退回到「前一塊道塊」,然後朝著「來向」之外的其他方向繼續探索。若4個方向都不可通過,則應從「當前路徑」上刪除該通道塊。c語言實現迷宮求解完整**
#include
#include
#include
#define true
1#define false
0#define ok
1#define error
0#define infeasible-1
#define overflow-2
#define stack_init_size
100//儲存空間初始分配量
#define stackincrement
10//儲存空間分配增量
typedef int status;
typedef structpostype;
typedef structselemtype;
typedef structsqstack;
//迷宮地圖為全域性變數
int mazemap[10]
[10]=
,//0
,//1
,//2
,//3
,//4
,//5
,//6
,//7
,//8
//9}
;status initstack
(sqstack*s)
status push
(sqstack*
s, selemtype e)
status pop
(sqstack*
s, selemtype* e)
status stackempty
(sqstack s
)void
printmaze()
}status footprint
(postype pos, int curstep)
status pass
(postype pos)
postype nextpos
(postype curpos, int i)
return curpos;
}void
makeprint
(postype pos)
status mazepath
(postype start, postype end)
curpos =
nextpos
(curpos,1)
;//下一位置是當前位置的東鄰
curstep++
;//探索下一步
printf
("step:%d"
, curstep);}
else
if(e.di <4)
}}}while(!
stackempty(s
));printf
("對不起,找不到出口\n");
return
false;}
int main()
資料結構第三章學習小結
一 本章內容小結 第三章主要學習了兩種資料結構 棧和佇列,它們是操作受限的線性表。棧只能在棧頂進行插入和刪除,因此先進後出 而佇列則是在隊頭刪除,隊尾插入,先進先出,因此需要根據題目來選取應用哪種資料結構。後面還通過棧來處理遞迴問題,並分析遞迴方法的效率與時間複雜度,最後通過學習三個經典案例 括號匹...
資料結構第三章學習小結
1.這一章學習了兩種新的結構,棧和佇列,棧是後進先出的結構,佇列是先進先出的結構,兩種結構的特點決定了兩種結構使用的場景。下面對棧和佇列的一些基本操作進行展示。一 棧 分為順序棧和鏈棧,這裡是順序棧的一些基本操作 1 include 2 include 3 using namespace std 4...
資料結構 第三章學習小結
1.本章內容小結 本章系統學習了佇列 fifo 和棧 lifo 的的各兩種實現方式以及它的一些應用。本章用鏈式儲存結構和順序儲存結構分別實現了佇列和棧,其中佇列的迴圈鍊錶的產生原因以及解決辦法 也就是使用迴圈鍊錶 讓我知道取模運算子 的作用比我想象的大。2.完成作業或實踐的心得 作業或實踐都是跟第三...