networkx.algorithms.traversal.edgebfs.edge_bfs

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

有向的、广度优先的边缘搜索 G 开始于 source .

以宽度优先搜索顺序生成g的边,直到生成所有边为止。

参数:
  • G图表 )--有向图/无向图/多重图。
  • 来源节点,节点列表 )--开始遍历的节点。如果没有,则可以任意重复地选择源,直到搜索到图中每个节点的所有边为止。
  • 方向无“原始”“反向”“忽略”(默认:无) )--对于有向图和有向多图,边遍历不需要考虑边的原始方向。当设置为“Reverse”时,每一条边都沿相反的方向进行遍历。当设置为“忽略”时,每个边都被视为无向。当设置为“原始”时,每个边都按指示处理。在这三种情况下,生成的边元组添加最后一个条目,以指示该边的遍历方向。如果方向为“无”,则生成的边没有指示方向。该指示得到遵守,但未报告。
产量:

edge有向边 )--指示宽度优先搜索路径的有向边。对于图, edge 是形式 (u, v) 在哪里? uv 是由横移确定的边缘的尾部和头部。对于多重图, edge 是形式 (u, v, key) 在哪里 key 是边缘的关键。当图形被定向时,则 uv 总是按照实际定向边缘的顺序。如果方向不是“无”,则扩展边元组以包括该边上的遍历方向(“正向”或“反向”)。

实际案例

>>> import networkx as nx
>>> 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')]

笔记

此函数的目标是访问边。它不同于更熟悉的广度优先搜索节点,如 networkx.algorithms.traversal.breadth_first_search.bfs_edges() ,因为一旦访问了每个节点,它就不会停止。在有边有向图中 [(0,1),(1,2),(2,1)] ,如果没有此函数提供的功能,则不会访问边缘(2,1)。

参见

bfs_edges(), bfs_tree(), edge_dfs()