總結:
廣度優先搜尋會建立一棵解答樹,其核心是狀態的擴充套件,通過從現有狀態向幾個可能方向擴充套件,實現狀態擴充套件,並將後續狀態入隊,借助佇列實現狀態轉移,進而實現樹的層次遍歷;為降低複雜度需要對樹進行剪枝,確定有效狀態,標記有效狀態,減少重複操作,另外只對有效狀態進行遍歷,即入隊的都是有效狀態,由於層次遍歷層數遞增的特點,其適合於求解最優值問題
王道機試指南原文:
1.狀態。我們確定求解問題中的狀態。通過狀態的轉移擴充套件,查詢遍歷所有
的狀態,從而從中尋找我們需要的答案。
2.狀態擴充套件方式。在廣度優先搜尋中,我們總是盡可能擴充套件狀態,並先擴充套件得出的狀態先進行下一次擴充套件。在解答樹上的變現為,我們按層次遍歷所有狀態。
3.有效狀態。對有些狀態我們並不對其進行再一次擴充套件,而是直接捨棄它。因為根據問題分析可知,目標狀態不會由這些狀態經過若干次擴充套件得到。即目標狀態,不可能存在其在解答樹上的子樹上,所以直接捨棄。
4.佇列。為了實現先得出的狀態先進行擴充套件,我們使用佇列,將得到的狀態依次放入隊尾,每次取隊頭元素進行擴充套件。
5.標記。為了判斷哪些狀態是有效的,哪些是無效的我們往往使用標記。
6.有效狀態數。問題中的有效狀態數與演算法的時間複雜度同數量級,所以在進行搜尋之前必須估算其是否在我們所可以接受的範圍內。
7.最優。廣度優先搜尋常被用來解決最優值問題,因為其搜尋到的狀態總是按照某個關鍵字遞增(如前例中的時間和倒杯子次數),這個特性非常適合求解最優值問題。所以一旦問題**現最少、最短、最優等關鍵字,我們就要考慮是否是廣度優先搜尋。
搜尋 廣度優先搜尋
廣度優先搜尋一層一層地進行遍歷,每層遍歷都是以上一層遍歷的結果作為起點,遍歷乙個距離能訪問到的所有節點。需要注意的是,遍歷過的節點不能再次被遍歷。class solution,int shortestpathbinarymatrix vectorint grid length return 1 cl...
廣度優先搜尋
include include include include using namespace std struct node 圖頂點結構定義 typedef struct node graph 圖形的結構新型態 struct node head 9 圖形頂點陣列 int visited 9 遍歷標...
廣度優先搜尋
廣度優先搜尋詳解 1.也稱寬度優先搜尋,顧名思義,就是將一棵樹一層一層往下搜。演算法首先搜尋和s距離為k的所有頂點,然後再去搜尋和s距離為k l的其他頂點。bfs是一種完備策略,即只要問題有解,它就一定可以找到解。並且,廣度優先搜尋找到的解,還一定是路徑最短的解。但是它盲目性較大,尤其是當目標節點距...