資料結構面試題 迷宮問題求解

2021-08-18 02:44:20 字數 613 閱讀 7113

給出三種標記的方法,兩種思路

首先說標記方法,標記方法很重要,關乎問題解決的方便程度

將走過的路標記為任意規定的相同數字,比如全部標記為2,區別於一開始的1即可,規則是碰到2不可走,因為其已走過,這種方法的缺點:經常會漏解線路,且帶環問題無法解決

標記方法同法一,不同的是規則,退回的時候將標記置回1,這種標記方法比法一更好,但是使用方法較苛刻,只能使用遞迴方法求解,且可以求出最短路徑,缺點會走很多冤枉路,降低演算法效率

stack* s;

stackpush(s, entry);//先入迷宮入口

while (stackempty(s))//只有棧為空說明無路可走,已經回到起點

if (上可以走)

if (下可以走)

if (左可以走)

if (右可以走)

}

使用遞迴來解決

其實遞迴的原理和棧是一樣的,但是遞迴天然可以走遍所有入口,比棧更靈活,遞迴的原理可以理解為棧幀的不斷建立,在這個過程中棧幀不斷建立,當走到頭時,棧幀釋放,相當於不斷地壓棧出棧,且不需要自行寫棧來輔助(不理解棧幀的可以看我之前寫的棧幀的部落格)

我在獲取最短路徑的時候用棧輔助來獲取,遞迴時並未使用棧

資料結構 迷宮求解

定義迷宮 include seqstack.h define max row 6 最大行數 define max col 6 最大列數 typedef struct mazemaze void mazeinit maze maze size t i 0 for imap i j map i j vo...

資料結構 迷宮求解

include include int mg 10 10 地圖 int m 8 行數 int n 8 列數 typedef struct box 定義方塊型別 typedef struct sttype 定義順序棧型別 bool mgpath int xi,int yi,int xe,int ye ...

資料結構 面試題

python實現 寫個大概,import re def quick sort alist,first,last if first last return mid value alist first low first high last while low high while low mid va...