dgl.dfs_labeled_edges_generator

dgl.dfs_labeled_edges_generator(graph, source, reverse=False, has_reverse_edge=False, has_nontree_edge=False, return_labels=True)[source]

按类型标记的深度优先搜索 (DFS) 生成边。

共有三种标签:FORWARD(0)、REVERSE(1)、NONTREE(2)

FORWARD 边是指 u 已被访问但 v 未被访问的边。REVERSE 边是指 uv 都已被访问且该边位于 DFS 树中的边。NONTREE 边是指 uv 都已被访问但该边不在 DFS 树中的边。

有关更多详情,请参阅 networkxdfs_labeled_edges

可以指定多个源节点来开始 DFS 遍历。需要确保每个源节点属于不同的连通分量,以便轻松合并前沿。否则,行为是未定义的。

参数:
  • graph (DGLGraph) – 图对象。

  • source (list, tensor of nodes) – 源节点。

  • reverse (bool, optional) – 如果为 True,则沿着入边方向遍历。

  • has_reverse_edge (bool, optional) – 如果为 True,则包含 REVERSE 边。

  • has_nontree_edge (bool, optional) – 如果为 True,则包含 NONTREE 边。

  • return_labels (bool, optional) – 如果为 True,则返回每条边的标签。

返回值:

  • 边的前沿列表 – 每个边的前沿都是边 ID 的列表或 tensor。

  • 整数列表的列表 – 每条边的标签,按照边的前沿的相同顺序组织。

示例

给定一个图(有向图,边从小的节点 ID 指向大的节点 ID)

      2 - 4
     / \
0 - 1 - 3 - 5

边的添加顺序 [(0, 1), (1, 2), (1, 3), (2, 3), (2, 4), (3, 5)]

>>> g = dgl.graph(([0, 1, 1, 2, 2, 3], [1, 2, 3, 3, 4, 5]))
>>> list(dgl.dfs_labeled_edges_generator(g, 0, has_nontree_edge=True))
(tensor([0]), tensor([1]), tensor([3]), tensor([5]), tensor([4]), tensor([2])),
(tensor([0]), tensor([0]), tensor([0]), tensor([0]), tensor([0]), tensor([2]))