概念
廣度優先搜尋是一種層級式的遍歷方式,會先訪問完同一層的所有節點,再訪問下一層。
程式碼實作
from collections import defaultdict, deque
def bfs(Tree, start_node):
queue = deque([start_node]) # 使用 queue 儲存待訪問節點
while queue:
now_node = queue.popleft() # 取出隊列最前面的節點
print(now_node, end=" ")
for next_node in Tree[now_node]: # 將所有子節點加入隊列
queue.append(next_node)
# 建立樹結構(與 DFS 相同)
tree = defaultdict(list)
root = ""
while True:
try:
st, *sts = input().split()
if root == "":
root = st
tree[st].extend(sts)
except:
break
bfs(tree, root)
特點
-
使用佇列 (Queue) 實作
-
訪問順序:按層級由上到下、由左到右
-
時間複雜度:O(V + E)
-
適合用於尋找最短路徑