generic_bfs_edges#

generic_bfs_edges(G, source, neighbors=None, depth_limit=None)[source]#

广度优先搜索遍历边。

广度优先搜索从 source 开始,并通过 neighbors 函数将新访问节点的邻居节点入队。

Parameters:
GNetworkX 图
source节点

广度优先搜索的起始节点;此函数仅遍历从该节点可达的连通分量中的边。

neighbors函数

一个函数,接收新访问的图节点作为输入,并返回该节点的邻居节点的*迭代器*(不仅仅是列表),可以自定义排序。如果未指定,默认为 G.neighbors 方法,但通常可以是任何返回给定节点邻居的迭代器的函数,顺序不限。

depth_limitint, 可选(默认=len(G))

指定最大搜索深度。

Yields:
edge

source 开始的广度优先搜索中的边。

Notes

此实现来自 PADS,首次访问于2004年7月,当时该代码处于公共领域。允许深度限制的修改基于维基百科文章 “ 深度限制搜索”。

Examples

>>> G = nx.path_graph(7)
>>> list(nx.generic_bfs_edges(G, source=0))
[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]
>>> list(nx.generic_bfs_edges(G, source=2))
[(2, 1), (2, 3), (1, 0), (3, 4), (4, 5), (5, 6)]
>>> list(nx.generic_bfs_edges(G, source=2, depth_limit=2))
[(2, 1), (2, 3), (1, 0), (3, 4)]

neighbors 参数可以用于指定每个节点邻居的访问顺序。在以下示例中,我们修改默认邻居返回顺序,优先返回*奇数*节点:

>>> def odd_first(n):
...     return sorted(G.neighbors(n), key=lambda x: x % 2, reverse=True)
>>> G = nx.star_graph(5)
>>> list(nx.generic_bfs_edges(G, source=0))  # 默认邻居排序
[(0, 1), (0, 2), (0, 3), (0, 4), (0, 5)]
>>> list(nx.generic_bfs_edges(G, source=0, neighbors=odd_first))
[(0, 1), (0, 3), (0, 5), (0, 2), (0, 4)]