演算法學習筆記 廣度優先搜尋 1

2021-07-31 16:41:07 字數 1059 閱讀 6052

兩個步驟

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,屬於一種盲目搜尋法,目的是系統地展開並檢查圖中的所有節點,以找尋結果。換句話說...