edge_dfs#

edge_dfs(G, source=None, orientation=None)[source]#

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’)。

另请参阅

dfs_edges()

注意

此函数的目标是访问边。它与更常见的节点深度优先遍历不同,后者由 dfs_edges() 提供,区别在于它不会在访问完所有节点后停止。在一个边为 [(0, 1), (1, 2), (2, 1)] 的有向图中,如果不是此函数提供的功能,边 (2, 1) 将不会被访问。

示例

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