《python算法教程》Day6 - BFS遍历图(邻接字典)

这是《python算法教程》的第6篇读书笔记。笔记的主要内容为BFS(广度优先搜索,breath-first search)。

BFS简介

BFS会对图逐层访问记先访问某个节点的所有临接节点,之后再访问这个节点的其中一个临接节点的所有临接节点。以下图为例,BFS先访问a节点的邻接节点b、f;再访问b的邻接节点c、d、f;接下来访问a的另一个邻接节点 f 的邻接节点……

代码示例

BFS将遍历下图。


《python算法教程》Day6 - BFS遍历图(邻接字典)_第1张图片
DAG.JPG
#迭代版bfs
import collections

def bfs(G,s):
    #P为记录每一个节点的父节点的字典
    P={s:None}
    Q=collections.deque()
    Q.append(s)
    while Q:
        u=Q.popleft()
        for v in G[u]:
            if v in P.keys():
                continue
            P[v]=P.get(v,u)
            Q.append(v)
    return P

#图的邻接字典
G={
    'a':{'b','f'},
    'b':{'c','d','f'},
    'c':{'d'},
    'd':{'e','f'},
    'e':{'f'},
    'f':{}
}

P=bfs(G,'a')
print(P)


#获取a至e的路径
u='e'
path=[u]
while P[u] is not None:
    path.append(P[u])
    u=P[u]
path.reverse()
print(path)

你可能感兴趣的:(《python算法教程》Day6 - BFS遍历图(邻接字典))