資料結構 第三章(學習筆記二(迷宮求解))

2021-10-25 07:26:51 字數 1897 閱讀 4244

求迷宮中從入口到出口的所有路徑是乙個經典的程式設計問題。由於計算機解決迷宮問題時,通常用的是「窮舉求解」的方法,即從口出發,順某方向向前探索,若能走通,則繼續往前走;否則沿原入口路退回,換乙個方向再繼續探索,直至所有可能的通路都探索到為止。為了保證在任何位置上都能沿原路退回,顯然需要用乙個後進先出的結構來儲存從入口到當前位置的路徑。因此,在求迷宮通路的演算法中應用棧。

程式中,建立二維陣列為迷宮,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.完成作業或實踐的心得 作業或實踐都是跟第三...