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)
,其中u
和v
是由遍历确定的边的尾部和头部。对于多重图,edge
的形式为(u, v, key)
,其中key
是边的键。当图是有向图时,u
和v
的顺序始终与实际有向边的顺序相同。如果 orientation 不为 None,则边元组会扩展,包含该边的遍历方向(‘forward’ 或 ‘reverse’)。
另请参阅
注意
此函数的目标是访问边。它与更常见的节点深度优先遍历不同,后者由
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')]