dfs_labeled_edges#

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

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

Parameters:
GNetworkX 图
source节点, 可选

指定深度优先搜索的起始节点,并返回从源可达的组件中的边。

depth_limit整数, 可选 (默认=len(G))

指定最大搜索深度。

sort_neighbors函数 (默认=None)

一个接受节点迭代器的函数,并返回具有自定义顺序的相同节点的可迭代对象。 例如, sorted 将按递增顺序对节点进行排序。

Returns:
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’。

Notes

如果没有指定源节点,则任意选择一个源节点并重复直到图中所有组件都被搜索。

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

Examples

标签揭示了深度优先搜索算法的完整过程,比例如 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')]