transitive_closure#
- transitive_closure(G, reflexive=False)[source]#
返回图的传递闭包
图 G = (V,E) 的传递闭包是一个图 G+ = (V,E+),其中对于 V 中的所有 v, w,当且仅当在 G 中存在从 v 到 w 的路径时,E+ 中存在边 (v, w)。
在此定义中,处理从 v 到 v 的路径有一些灵活性。自反传递闭包为长度为 0 的从 v 到 v 的路径创建一个自环。通常的传递闭包仅在存在环(长度 > 0 的从 v 到 v 的路径)时创建自环。我们也允许选择不创建自环。
- 参数:
- GNetworkX 图
有向/无向图/多重图。
- reflexive布尔值或 None,可选(默认为 False)
决定何时在传递闭包中创建自环。如果为 True,平凡环(长度 0)创建自环。结果是 G 的自反传递闭包。如果为 False(默认),非平凡环创建自环。如果为 None,不创建自环。
- 返回:
- NetworkX 图
G
的传递闭包
- 抛出:
- NetworkXError
如果
reflexive
不在{None, True, False}
中
参考文献
示例
平凡环(即长度为 0 的环)的处理由
reflexive
参数控制。当
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)])