transitive_closure#
- transitive_closure(G, reflexive=False)[源代码]#
返回图的传递闭包
g=(v,e)的传递闭包是一个图g+=(v,e+),使得对于所有v,w在v中都有一个边(v,w)在e+中当且仅当存在从v到w在g中的路径。
在这个定义中处理从V到V的路径有一定的灵活性。自反传递闭包为长度为0的V到V的路径创建自循环。通常的传递闭包仅在存在周期(从V到V的长度为0的路径)时才产生自循环。我们还允许没有自循环的选项。
- 参数
- G网络X图表
有向/无向图/多重图。
- reflexiveBool或None,可选(默认值:False)
确定循环何时在传递闭合中创建自循环。如果为True,则平凡循环(长度为0)会创建自循环。结果是G的自反式传递闭包。如果FALSE(缺省值),非平凡循环会产生自循环。如果没有,则不会创建自循环。
- 返回
- 网络X图表
传递闭包
G
- 加薪
- NetworkXError
如果
reflexive
不在{{None, True, False}}
工具书类
实例
对平凡(即长度为0)周期的处理由
reflexive
参数。在以下情况下,平凡(即长度为0)循环不会产生自环
reflexive=False
(默认设置):>>> DG = nx.DiGraph([(1, 2), (2, 3)]) >>> TC = nx.transitive_closure(DG, reflexive=False) >>> TC.edges() OutEdgeView([(1, 2), (1, 3), (2, 3)])
然而,在以下情况下,非平凡(即长度大于0)周期会产生自循环
reflexive=False
(默认设置):>>> 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)])
平凡循环(长度为0)在以下情况下创建自循环
reflexive=True
::>>> 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)])