演算法 廣度優先搜尋 BFS

2021-10-05 07:14:49 字數 1180 閱讀 2410

廣度優先搜尋主要解決兩類問題:

(1)從a節點出發,有到b節點的路徑麼?

(2)從a節點出發,到b節點的最短路徑是什麼?

演算法複雜度為o(v+e),其中v為頂點,e為邊數。

例:假設你要在朋友中找乙個芒果銷售商,如果朋友中沒有,則找朋友的朋友,即人際關係網。實現的是第一類問題,在你的人際關係王忠,能找到芒果銷售商麼?

from collections import deque                   # 引入佇列

graph =

# 建立人際關係網

graph[

'you']=

['alice', 'bob', 'claire'

]graph[

'alice']=

['peggy'

]graph[

'bob']=

['anuj','peggy'

]graph[

'claire']=

['thom', 'jonny'

]graph[

'anuj']=

graph[

'peggy']=

graph[

'thom']=

graph[

'jonny']=

def person_is_seller(name): # 判斷是否是芒果銷售商

return name[-1]

=='m'

def search(name):

search_queue = deque(

)# 將朋友加入到佇列

search_queue += graph[name]

searched =

# 標記已經檢查過的朋友,避免進入死迴圈

while search_queue:

person = search_queue.popleft(

)if person not in searched:

if person_is_seller(person):

print(person + ' is a mango seller'

)return true

else:

search_queue += graph[person]

return false

BFS廣度優先搜尋

廣度優先搜尋,利用佇列實現,結束標誌是隊列為空的時候 承接dfs的演算法實現的講例,對於迷宮問題我們也可以採取廣度優先搜尋實現 include iostream include cstdio include cstdlib using namespace std int map 55 55 int ...

bfs廣度優先搜尋

這一課我們來學習圖的另一種遍歷方法 廣度優先搜尋 breadth first search,簡稱 bfs 這是一種連通圖的常用遍歷策略,通常用於求起點到各點的最短路徑,以及求兩點之間的最優路徑等問題。首先我們先來看看廣度優先搜尋的具體方法吧 對於乙個連通圖,我們假設一開始所有頂點均未被訪問,廣度優先...

廣度優先搜尋bfs

bfs即廣度優先搜尋演算法,其是搜尋演算法中的一種。1.dfs常用於尋找是否存在解 其從a節點出發,選取乙個臨近點b,然後不斷深入,在搜尋完b的下屬節點 ehif 後,回到a再搜尋臨近a的c節點,以此類推。2.bfs則用於在最短的時間或最少的移動距離內找到解 其往往從a節點出發,搜尋周圍所有的圍繞節...