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}}

工具书类

1

Https://www.ics.uci.edu/~eppstein/PADS/PartialOrder.py

实例

对平凡(即长度为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)])