edge_bfs#
- edge_bfs(G, source=None, orientation=None)[source]#
从
source
节点开始,对图G
中的边进行广度优先搜索。按广度优先搜索的顺序生成图
G
中的边,直到所有边都被生成。- Parameters:
- G图
有向/无向图/多重图。
- source节点, 节点列表
遍历开始的节点。如果为None,则任意选择一个源节点,并重复直到图中每个节点的所有边都被搜索到。
- orientationNone | ‘original’ | ‘reverse’ | ‘ignore’ (默认: None)
对于有向图和有向多重图,边的遍历不需要遵循边的原始方向。 当设置为’reverse’时,每条边都以反方向遍历。 当设置为’ignore’时,每条边都被视为无向。 当设置为’original’时,每条边都被视为有向。 在所有三种情况下,生成的边元组会添加一个最后条目来指示该边被遍历的方向。 如果orientation为None,则生成的边不指示方向。 方向被尊重,但不报告。
- Yields:
- edge有向边
指示广度优先搜索所走路径的有向边。 对于图,
edge
的形式为(u, v)
,其中u
和v
分别是遍历中边的尾部和头部。 对于多重图,edge
的形式为(u, v, key)
,其中key
是边的键。当图是有向的时,u
和v
总是按照实际有向边的顺序。 如果orientation不为None,则边元组会扩展以包括在该边上的遍历方向(’forward’或’reverse’)。
See also
bfs_edges
bfs_tree
edge_dfs
Notes
此函数的目标是访问边。它与更熟悉的节点广度优先搜索不同,如由
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’报告按探索顺序的所有边。
Examples
>>> 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')]