4 17部落格(廣度優先搜尋和深度優先搜素)

2021-09-19 04:34:16 字數 829 閱讀 8318

這週講了搜尋演算法。

相比於單純的列舉演算法有了一定的方向性和目標性。演算法是在解的空間裡,從乙個狀態轉移(按照要求拓展)到其他狀態,這樣進行下去,將解的空間中的狀態遍歷,找到答案(目標的狀態)。

搜尋演算法分為廣度優先搜尋(bfs)和深度優先搜尋(dfs)。

廣度優先搜尋

基本思想:從初始狀態

s 開始,利用規則,生成所有可能的狀態。一層層的尋找所要的結果,如果沒找到所需要的答案,就繼續將這層尋找完,然後繼續向下一層尋找,直到找到答案。

廣度優先即是要按層數一層一層來遍歷,先將一層全部擴充套件,然後再進行下一層。

這樣利用佇列先進先出(

fifo

)的性質恰好可以來完成這個任務。

具體過程:

1每次取出佇列首元素(初始狀態),進行拓展

2然後把拓展所得到的可行狀態都放到佇列裡面

3將初始狀態刪除

4一直進行以上三步直到隊列為空。

深度優先搜尋

通俗的講就是在尋找的過程中,一條路走到黑。和bfs做對比

從初始狀態,利用規則生成搜尋樹下一層任乙個結點,檢查是否出現目標狀態,若未出現,以此狀態利用規則生成再下一層任乙個結點,再檢查,重複過程一直到葉節點(即不能再生成新狀態節點),當它仍不是目標狀態時,回溯到上一層結果,取另一可能擴充套件搜尋的分支。採用相同辦法一直進行下去,直到找到目標狀態為止。

深度優先搜尋和廣度優先搜尋

深度優先的思想是先記住當前的起點,然後選定乙個方向一條道走到黑,若失敗則回到起點再選定另外乙個方向走到黑。廣度優先的思想是記住當前的起點,然後選定各個方向的相鄰點作為新的起點,再繼續。可以看出,深度優先和廣度優先都需要記住當前的起點,不同的是深度優先每次只需要記住乙個方向的相鄰點,廣度優先則要記住所...

廣度優先搜尋和深度優先搜尋

dbf深度優先搜尋,最經典的方法,可以使用遞迴來實現。結構體定義 typedef char vertextype typedef int edgetype define maxvex 100 define infinite 65535 typedef struct mgraph 測試函式如下 mgr...

深度優先搜尋和廣度優先搜尋

定義 圖 graph 是由頂點的有窮非空集合和頂點之間邊的集合組成,通常表示為 g v,e 其中,g表示乙個圖,v是圖g中頂點的集合,e是圖g中邊的集合.簡單點的說 圖由節點和邊組成。乙個節點可能與眾多節點直接相連,這些節點被稱為鄰居。如二叉樹就為乙個簡單的圖 廣度優先搜尋演算法 breadth f...