bfs&dfs
阿新 • • 發佈:2022-03-31
如下圖
bfs程式碼
點選檢視程式碼
""" bfs演算法: 儲存:將每個節點的相鄰節點用key:value的形式存在字典中 遍歷:從起點開始,先把起點(key)的值(value)取出,然後檢查取出的值是否已經被執行過,沒有則繼續取(key)出其值(value)執行前邊的步驟 """ graph = { 'A': ['B', 'C'], 'B': ['A', 'C', 'D'], 'C': ['A', 'B', 'D', 'E'], 'D': ['B', 'C', 'E', 'F'], 'E': ['C', 'D'], 'F': ['D'] } def bfs(graph, start): queue = [start] # 待遍歷的節點,是一個佇列 check = set(start) # 已經走過的節點 result = list() # 結果 while len(queue) > 0: node = queue.pop(0) # 出隊 result.append(node) for el in graph[node]: if el not in check: # 過濾已經走過的節點 check.add(el) queue.append(el) # 入隊 return result
dfs程式碼
dfs是將bfs中待遍歷節點的儲存結構從佇列換成棧
點選檢視程式碼
def dfs(graph, start): stack = [start] # 待遍歷的節點,是一個棧 check = set(start) # 已經走過的節點 result = list() # 結果 while len(stack) > 0: node = stack.pop() # 出棧 result.append(node) for el in graph[node]: if el not in check: # 過濾已經走過的節點 check.add(el) stack.append(el) return result
一個部落格
https://blog.csdn.net/Huangkaihong/article/details/106131950