演算法的工作原理:
建立乙個佇列,用於儲存要檢查的人
從佇列中彈出乙個人
檢查這個人是否被檢查過
檢查這個人是否為芒果經銷商
是:大功告成
否:將這個人的所有鄰居都加入到佇列中
回到第二步
如果隊列為空,就說明沒有找到芒果經銷商
# -*- encoding: utf-8 -*-
from collections import deque
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("%s is a mango seller!" % person)
return true
else:
search_queue += graph[person]
return false
def person_is_seller(man): # 判斷是否為芒果經銷商
return man[-1] == "m"
if __name__ == "__main__":
graph = {}
graph ["you"] = ["alice", "bob", "claire"]
graph ["bob"] = ["anuj", "peggy"]
graph ["alice"] = ["peggy"]
graph ["claire"] = ["thom", "jonny"]
graph ["anuj"] =
graph ["peggy"] =
graph ["thon"] =
graph ["jonny"] =
search("you")
搜尋 廣度優先搜尋
廣度優先搜尋一層一層地進行遍歷,每層遍歷都是以上一層遍歷的結果作為起點,遍歷乙個距離能訪問到的所有節點。需要注意的是,遍歷過的節點不能再次被遍歷。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是一種完備策略,即只要問題有解,它就一定可以找到解。並且,廣度優先搜尋找到的解,還一定是路徑最短的解。但是它盲目性較大,尤其是當目標節點距...