transitive_closure#

transitive_closure(G, reflexive=False)[source]#

返回图的传递闭包

图 G = (V,E) 的传递闭包是图 G+ = (V,E+),其中对于所有 v, w ∈ V,当且仅当 G 中存在从 v 到 w 的路径时,E+ 中存在边 (v, w)。

在此定义中,处理从 v 到 v 的路径有一定的灵活性。自反传递闭包会为长度为 0 的从 v 到 v 的路径创建自环。通常的传递闭包仅在存在长度大于 0 的环(从 v 到 v 的路径)时创建自环。我们还允许选择不创建自环。

Parameters:
GNetworkX 图

一个有向/无向图/多重图。

reflexive布尔值或 None,可选(默认值:False)

确定在传递闭包中何时创建自环。如果为 True,长度为 0 的环(自环)会创建自环。结果是 G 的自反传递闭包。 如果为 False(默认值),长度大于 0 的环会创建自环。 如果为 None,则不创建自环。

Returns:
NetworkX 图

G 的传递闭包

Raises:
NetworkXError

如果 reflexive 不在 {None, True, False}

References

Examples

通过 reflexive 参数控制长度为 0 的环(自环)的处理方式。

reflexive=False (默认值)时,长度为 0 的环不会创建自环:

>>> DG = nx.DiGraph([(1, 2), (2, 3)])
>>> TC = nx.transitive_closure(DG, reflexive=False)
>>> TC.edges()
OutEdgeView([(1, 2), (1, 3), (2, 3)])

然而,当 reflexive=False (默认值)时,长度大于 0 的环会创建自环:

>>> DG = nx.DiGraph([(1, 2), (2, 3), (3, 1)])
>>> TC = nx.transitive_closure(DG, reflexive=False)
>>> TC.edges()
OutEdgeView([(1, 2), (1, 3), (1, 1), (2, 3), (2, 1), (2, 2), (3, 1), (3, 2), (3, 3)])

reflexive=True 时,长度为 0 的环会创建自环:

>>> DG = nx.DiGraph([(1, 2), (2, 3)])
>>> TC = nx.transitive_closure(DG, reflexive=True)
>>> TC.edges()
OutEdgeView([(1, 2), (1, 1), (1, 3), (2, 3), (2, 2), (3, 3)])

第三个选项是当 reflexive=None 时不创建任何自环:

>>> DG = nx.DiGraph([(1, 2), (2, 3), (3, 1)])
>>> TC = nx.transitive_closure(DG, reflexive=None)
>>> TC.edges()
OutEdgeView([(1, 2), (1, 3), (2, 3), (2, 1), (3, 1), (3, 2)])