edge_bfs#

edge_bfs(G, source=None, orientation=None)[源代码]#

对图 G 中的边进行有向的广度优先搜索,从 source 开始。

按广度优先搜索的顺序生成图 G 的边,直到所有边都被生成。

参数:
G

有向/无向图/多重图。

source节点,节点列表

遍历开始的节点。如果为 None,则任意选择一个源节点并重复,直到搜索完图中每个节点的所有边。

orientationNone | ‘original’ | ‘reverse’ | ‘ignore’ (默认值: None)

对于有向图和有向多重图,边的遍历无需遵循原始边的方向。当设置为 'reverse' 时,每条边都按反方向遍历。当设置为 'ignore' 时,每条边都被视为无向边。当设置为 'original' 时,每条边都被视为有向边。在所有这三种情况下,生成的边元组会增加最后一个条目,以指示该边遍历的方向。如果 orientation 为 None,生成的边不指示方向。方向会被遵循,但不报告。

生成器返回:
edge有向边

表示广度优先搜索所经过路径的有向边。对于普通图,edge 的形式为 (u, v),其中 uv 是由遍历确定的边的尾节点和头节点。对于多重图,edge 的形式为 (u, v, key),其中 key 是边的键。当图是有向的时,uv 总是按照实际有向边的顺序排列。如果 orientation 不为 None,则边元组会扩展以包含在该边上的遍历方向('forward' 或 'reverse')。

另请参阅

bfs_edges
bfs_tree
edge_dfs

注意

此函数的目标是访问边。它与更常见的节点广度优先搜索(由 networkx.algorithms.traversal.breadth_first_search.bfs_edges() 提供)不同之处在于,它不会在所有节点都被访问后停止。在一个有向图,其边为 [(0, 1), (1, 2), (2, 1)],如果没有此函数提供的功能,边 (2, 1) 将不会被访问。

此函数的命名与 bfs_edges 非常相似。区别在于,'edge_bfs' 生成边,即使这些边延伸回已访问的节点;而 'bfs_edges' 生成由广度优先搜索 (BFS) 产生的树的边,因此如果边延伸到已访问的节点,则不报告这些边。这意味着 'edge_bfs' 报告所有边,而 'bfs_edges' 只报告基于节点的 BFS 遍历的边。另一种描述是,'bfs_edges' 报告 BFS 过程中遍历的边,而 'edge_bfs' 按照探索顺序报告所有边。

示例

>>> nodes = [0, 1, 2, 3]
>>> edges = [(0, 1), (1, 0), (1, 0), (2, 0), (2, 1), (3, 1)]
>>> list(nx.edge_bfs(nx.Graph(edges), nodes))
[(0, 1), (0, 2), (1, 2), (1, 3)]
>>> list(nx.edge_bfs(nx.DiGraph(edges), nodes))
[(0, 1), (1, 0), (2, 0), (2, 1), (3, 1)]
>>> list(nx.edge_bfs(nx.MultiGraph(edges), nodes))
[(0, 1, 0), (0, 1, 1), (0, 1, 2), (0, 2, 0), (1, 2, 0), (1, 3, 0)]
>>> list(nx.edge_bfs(nx.MultiDiGraph(edges), nodes))
[(0, 1, 0), (1, 0, 0), (1, 0, 1), (2, 0, 0), (2, 1, 0), (3, 1, 0)]
>>> list(nx.edge_bfs(nx.DiGraph(edges), nodes, orientation="ignore"))
[(0, 1, 'forward'), (1, 0, 'reverse'), (2, 0, 'reverse'), (2, 1, 'reverse'), (3, 1, 'reverse')]
>>> list(nx.edge_bfs(nx.MultiDiGraph(edges), nodes, orientation="ignore"))
[(0, 1, 0, 'forward'), (1, 0, 0, 'reverse'), (1, 0, 1, 'reverse'), (2, 0, 0, 'reverse'), (2, 1, 0, 'reverse'), (3, 1, 0, 'reverse')]