dfs_labeled_edges#

dfs_labeled_edges(G, source=None, depth_limit=None, *, sort_neighbors=None)[source]#

迭代深度优先搜索 (DFS) 中按类型标记的边。

参数:
GNetworkX 图
source节点, 可选

指定深度优先搜索的起始节点,并返回从 source 可达的分量中的边。

depth_limitint, 可选 (默认=len(G))

指定最大搜索深度。

sort_neighbors函数 (默认=None)

一个函数,它接受一个节点迭代器作为输入,并返回一个具有自定义顺序的相同节点的迭代器。例如,sorted 将按升序对节点进行排序。

返回:
edges: 生成器

一个生成器,生成形如 (u, v, d) 的三元组,其中 (u, v) 是在深度优先搜索中正在探索的边,d 是字符串 ‘forward’、‘nontree’、‘reverse’ 或 ‘reverse-depth_limit’ 之一。‘forward’ 边表示 u 已访问但 v 未访问。‘nontree’ 边表示 uv 都已访问但该边不在 DFS 树中。‘reverse’ 边表示 uv 都已访问且该边在 DFS 树中。当通过 ‘forward’ 边达到 depth_limit 时,会立即生成一条 ‘reverse’ 边,而不是探索子树。为了指示这种类型的 ‘reverse’ 边,生成的字符串是 ‘reverse-depth_limit’。

注意

如果没有指定 source,则会任意选择一个 source 并重复搜索,直到图中的所有连通分量都被搜索。

此函数的实现改编自 David Eppstein 在 PADS 中的深度优先搜索函数,并根据维基百科文章“深度限制搜索”进行了修改,以允许设置深度限制。

示例

与例如 dfs_edges() 相比,这些标签更详细地揭示了深度优先搜索算法的完整过程。

>>> from pprint import pprint
>>>
>>> G = nx.DiGraph([(0, 1), (1, 2), (2, 1)])
>>> pprint(list(nx.dfs_labeled_edges(G, source=0)))
[(0, 0, 'forward'),
 (0, 1, 'forward'),
 (1, 2, 'forward'),
 (2, 1, 'nontree'),
 (1, 2, 'reverse'),
 (0, 1, 'reverse'),
 (0, 0, 'reverse')]