廣度優先搜尋Python例項及注釋

2021-08-20 09:17:24 字數 1394 閱讀 7012

廣度優先搜素python例項及注釋

例子:

你是乙個種橘子的,而你要在你的朋友或朋友的朋友中找到橘子商人,從而把橘子賣出去。

概念:你和你的朋友是一度關係,也就是靠近你的第一層關係,關係較近。你的朋友的朋友是你的二度關係。

廣度優先搜尋:在本例子中就是先在一度關係中找橘子商人,找到就結束,如果一度關係沒找到就在二度關係中找。

朋友關係圖

在本示例python**中用字典表示圖中的關係,具體**及注釋如下:

#author:anthony

from collections import deque#collections 模組提供了一些有用的集合類

graph={}

graph['you']=['alice','bob','claire']

graph['bob']=['anuj','peggy']

graph['alice']=['peggy']

graph['claire']=['thom','jonny']

graph['anuj']=

graph['peggy']=

graph['thom']=

graph['jonny']=

#print(graph)

def person_is_seller(name):#名字最後一位字母是『m』就是商人

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):#如果person是商人就列印

print(person+' is a mango seller!')

else:#如果person不是商人,就將person的朋友都加入搜尋佇列

search_queue+=graph[person]

search('you')

python深度優先搜尋和廣度優先搜尋

圖的深度優先搜尋 depth first search 和樹的先序遍歷比較類似。它的思想 假設初始狀態是圖中所有頂點均未被訪問,則從某個頂點v出發,首先訪問該頂點,然後依次從它的各個未被訪問的鄰接點出發深度優先搜尋遍歷圖,直至圖中所有和v有路徑相通的頂點都被訪問到。若此時尚有其他頂點未被訪問到,則另...

搜尋 廣度優先搜尋

廣度優先搜尋一層一層地進行遍歷,每層遍歷都是以上一層遍歷的結果作為起點,遍歷乙個距離能訪問到的所有節點。需要注意的是,遍歷過的節點不能再次被遍歷。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 遍歷標...