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)])