演算法競賽學習周記 廣度優先搜尋(BFS)

2021-10-01 04:55:41 字數 784 閱讀 2647

廣搜,即廣度優先搜尋,是一種基於佇列這種資料結構的搜尋演算法。

即先進先出表佇列主要涉及兩種操作,出隊和入隊。在模擬這兩種操作時,要設兩個指標head和tail,指代隊首和隊尾。

head:指向隊首的前乙個元素

tail:指向隊尾元素

當head=2,tail=4時,佇列中共有4-2=2個元素。同理,每時每刻佇列中共有tail-head個元素(以下head簡稱h,tail簡稱t)

出隊:++h;//後移一位,相當於隊首後移一位

入隊:++t;que[t]=val;//val值入隊,隊尾向後移乙個位置。

廣搜即通過佇列反覆入隊出隊的過程。

void

bfs(所傳引數)}}

}

廣搜是通過記錄前驅結點,最後順藤摸瓜實現列印路徑的。設pre 陣列,用來記錄前驅結點。當擴充套件出

乙個結點時,記錄:pre[t]=h 。是佇列中的編號。

同dfs的搜尋機制相似,擴充套件節點並標記,雙層for迴圈遍歷二維陣列,同時記錄呼叫函式的次數。

1.dfs基於遞迴,bfs基於佇列。

2.dfs是「一條路走到底」,bfs是「地毯式搜尋」。

3.dfs的時間複雜度很高,往往需要剪枝。bfs首次搜到的是最優解,但是對空

間的要求高(主要是佇列需要空間)。

4.dfs 適用於求出所有解,bfs 適用於求出最優解。有時還需要對dfs求出的所有

解進行比較,確定乙個最優解,但利用dfs求最優解,時間複雜度高。

5.dfs和bfs都是非常優秀的搜尋演算法,更要多加練習。

廣度優先搜尋演算法

廣度優先搜尋 bfs 這個是第乙個研究的課題,廣度優先搜尋也叫寬度優先搜尋,英文為breadth first searth,開始看的時候一頭霧水,基本也能懂大致意思,但是還不是真正的理解,今天又仔細看看,大致理解上又更深了一層吧。下面來總結下,自己的一些體會,以及對它的獨到的理解。大的方面來說它是一...

廣度優先搜尋演算法

在深度優先搜尋中,深度越大的結點越先得到擴充套件。如果把它改為深度越小的結點越先得到擴充套件,就是廣度優先搜尋法。廣度優先搜尋演算法的基本思想 1 建立乙個空的狀態佇列ss 2 建立乙個空的狀態庫sb 3 把初始狀態s 0 存入佇列ss中 4 若佇列狀態是目標狀態,則搜尋成功,演算法執行中止。如該狀...

演算法之廣度優先搜尋

查詢最短路徑 廣度優先搜尋可回答兩類問題 第一類問題 從節點a出發,有前往節點b的路徑嗎?第二類問題 從節點a出發,前往節點b的哪條路徑最短?資料結構 人際關係圖 實現 map graph new hashmap graph.put 我 arrays.aslist 孫 吳 李 graph.put 孫...