edge_bfs#
- edge_bfs(G, source=None, orientation=None)[源代码]#
有向的、广度优先的边缘搜索
G
开始于source
.以宽度优先搜索顺序生成g的边,直到生成所有边为止。
- 参数
- G图表
有向/无向图/多重图。
- source节点,节点列表
开始遍历的节点。如果没有,则任意重复选择一个源,直到搜索完图中每个节点的所有边。
- orientation无|‘原始’|‘反向’|‘忽略’(默认为无)
对于有向图和有向多重图,边的遍历不需要考虑边的原始方向。当设置为“反转”时,每条边都以相反的方向遍历。当设置为‘忽略’时,每条边都被视为无方向。当设置为‘原始’时,每条边都被视为定向的。在所有三种情况下,生成的边元组都会添加最后一个条目,以指示遍历该边的方向。如果方向为None,则屈服边没有指示方向。这一方向受到尊重,但没有得到报道。
- 产量
- edge有向边
指示广度优先搜索所采用的路径的有向边。对于图表,请参见
edge
是以下形式的(u, v)
哪里u
和v
是由遍历确定的边的尾部和头部。对于多重图,edge
是以下形式的(u, v, key)
,在哪里key
是边缘的关键。当图形被定向时,则u
和v
始终按实际有向边的顺序排列。如果方向不是无,则扩展边缘元组以包括该边缘上的遍历方向(向前或向后)。
参见
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期间遍历的边,而“edges_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')]