【发布时间】:2022-01-29 04:42:02
【问题描述】:
让我们考虑一个加权无向图 G。 Networkx 是否有一种优化的方法来获取连接到一个焦点节点的每个子图的节点数和边数?
import networkx as nx
import matplotlib.pyplot as plt
listcolor = ['darkblue', 'blue', 'darkred', 'red', 'darkgreen', 'lime', 'gold', 'yellow', 'darkslateblue', 'darkorchid', 'darkorange', 'orange']
G = nx.Graph()
G.add_edge('A', 'B', weight= 1)
G.add_edge('A', 'J', weight= 2)
G.add_edge('K', 'L', weight= 4)
G.add_edge('E', 'F', weight= 7)
G.add_edge('I', 'J', weight= 8)
G.add_edge('B', 'K', weight= 9)
G.add_edge('B', 'E', weight= 17)
G.add_edge('A', 'C', weight= 19)
G.add_edge('H', 'K', weight= 19)
G.add_edge('G', 'H', weight= 20)
G.add_edge('D', 'H', weight= 22)
pos = nx.spring_layout(G, seed=2)
nx.draw(G,node_color = listcolor, with_labels = True)
plt.tight_layout()
plt.axis("off")
plt.show()
例如,让我们考虑节点 B:它有三个连接的子图,一个有 5 个节点(包括 K、L、D、H、G),一个有 4 个节点(包括 C、A、J、I)和一个有 2 个节点(包括 F、E)。现在,假设我需要获得相同的子图列表以及每个节点的数量,无论考虑的节点是什么(另一个示例为 K)。如何从 G 中有效地获取此子图列表及其节点和边数?
【问题讨论】:
-
感兴趣的节点是否总是树的根?
-
如果是这样,最快的方法是移除节点,然后确定(弱)连接的组件(这基本上只是深度优先搜索,因此很难被击败)。
-
所以我将深度复制图形,然后删除焦点节点,然后获取子图列表,如该列表(nx.connected_components(G))。谢谢,听起来不错。
-
你会考虑去掉颜色吗?在深蓝色阴影下阅读深色标签并不是特别方便。
标签: python networkx graph-theory