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)
,其中u
和v
是由遍历确定的边的尾节点和头节点。对于多重图,edge
的形式为(u, v, key)
,其中key
是边的键。当图是有向的时,u
和v
总是按照实际有向边的顺序排列。如果 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')]