contracted_edge#

contracted_edge(G, edge, self_loops=True, copy=True)[source]#

返回由收缩指定边得到的新图。

边收缩将边的两个端点识别为一个单一节点,该节点连接到原有两个节点所连接的任何边。通过边收缩得到的新图称为原图的*子图*。

Parameters:
GNetworkX图

将要收缩边的图。

edge元组

必须是 G 中的两个节点。

self_loops布尔值

如果为True, G 中连接边端点的任何边(包括 edge )在返回的图中将成为新节点的自环。

copy布尔值(默认为True)

如果为True,将在 G 的副本上执行收缩操作,否则将在原地进行收缩。

Returns:
NetworkX图

一个与 G 类型相同的新图对象( G 保持不变),其中 edge 的端点被识别为一个单一节点。 edge 的右节点将被合并到左节点中,因此返回的图中只会出现左节点。

Raises:
ValueError

如果 edge 不是 G 中的边。

Examples

尝试收缩两个非相邻节点会引发错误:

>>> G = nx.cycle_graph(4)
>>> nx.contracted_edge(G, (1, 3))
Traceback (most recent call last):
  ...
ValueError: Edge (1, 3) does not exist in graph G; cannot contract it

在具有*n*个节点的环图中收缩两个相邻节点会得到具有*n - 1*个节点的环图:

>>> C5 = nx.cycle_graph(5)
>>> C4 = nx.cycle_graph(4)
>>> M = nx.contracted_edge(C5, (0, 1), self_loops=False)
>>> nx.is_isomorphic(M, C4)
True