兩個步驟
1. 使用圖來建立問題模型
2. 使用廣度優先搜尋解決問題
圖用於模擬一組連線。
圖由節點和邊組成。直接相連的節點稱為鄰居。
當圖是有向圖的時候a–>b(a指向b)那麼b是a的鄰居,a不是b的鄰居。
當圖是無向圖的時候a—b,他們互為鄰居。
1)廣度優先搜尋是一種用於圖的查詢演算法。
2)第一類問題:從節點a出發,有前往節點b的路徑嗎?
第二類問題:從節點a出發,前往b的哪條路徑最短?
可以發現要解決第二類問題,首先要考慮第一類問題的答案是否成立。
一圈一圈向外輻射查詢
可以使用雜湊表實現,也就是python中的字典。
使用佇列(deque)
為了避免陷入死迴圈,所以我們要加入乙個判斷乙個值是否已經被查詢過了。可以使用乙個列表儲存已經被查詢過的值。
o(v + e)
v: 頂點
e:邊數
from collections import deque
graph = {}
defsearch
(name):
search_queue = deque()
search_queue += graph[name]
searched =
while search_queue:
person = search_queue.popleft()
ifnot person in searched:
if person_is_seller(person):
print person + 'is a mango seller!'
return ture
else:
search_queue += graph[person]
return
false
defperson_is_seller
(name):
pass
廣度優先搜尋1
乙個人站在n點,只能向左走一步,或者向右走一步,或者直接走n的2倍步,要求走最少的步數抓住站在k點的牛。include define max 200005 定義最大值 using namespace std int cnt v 3000000 初始化 void bfs int n,int k 廣搜 ...
《演算法筆記》廣度優先搜尋 BFS 初步學習
bfs一般由佇列實現,且總是按層次的順序進行遍歷,其基本寫法如下 void bfs int s 下面是對每乙個步驟的說明 1.定義佇列q,並將起點s入隊 2.寫乙個while迴圈,迴圈條件是佇列q非空 3.在while迴圈裡,先取出隊首元素top,然後訪問他 訪問可以是任何事情,例如輸出 訪問完將其...
演算法學習筆記 寬度優先搜尋(BFS)
寬度優先搜尋演算法 又稱廣度優先搜尋 是最簡便的圖的搜尋演算法之一,這一演算法也是很多重要的圖的演算法的原型。dijkstra單源最短路徑演算法和prim最小生成樹演算法都採用了和寬度優先搜尋類似的思想。其別名又叫bfs,屬於一種盲目搜尋法,目的是系統地展開並檢查圖中的所有節點,以找尋結果。換句話說...