1. 程式人生 > 其它 >bfs&dfs

bfs&dfs

如下圖

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