我有这个问题,我需要帮助,这是我的代码:
cliques=[clique for clique in nx.find_cliques(GC) if len(clique)>2]
for clique in cliques:
if len (clique)==3:
GC.remove_edge()
print "Clique to appear: ",clique
#draw the graph
nx.draw(GC)
plt.show()
首先我在我的图表中搜索发现派系,然后我测试长度为3的集团,如果真的我想删除一个边缘那么我可以消除完整图形(3)。 我怎么能这样做?
由于
答案 0 :(得分:4)
我认为这里最棘手的问题是处理共享边缘。每次删除边缘时都不想搜索派系,但是您需要记住已经删除的边缘。
查看the documentation,我们发现find_cliques
函数是一个生成器。
此实现是列表的生成器,每个列表都包含 最大集团的成员
这是否意味着您可以生成一个派系,删除一个边缘,然后生成下一个集团,我们的生成器会知道我们已经删除了边缘?
用另一个问题回答这个问题:为什么不在每次分解集团时突破发电机?
edge_removed = True
while edge_removed:
edge_removed = False
for clique in nx.find_cliques(GC):
if len (clique)>=3:
GC.remove_edge(clique[0], clique[1])
edge_removed = True
break # Gotta restart the generator now...
你必须记住,你所处理的派系有可能非常耗费资源,因为即使只是在图中检测到派系也是NP完全的。
答案 1 :(得分:0)
if len(clique)==3:
GC.remove_edge(*clique[0:2])
或(等效)
if len(clique)==3:
GC.remove_edge(clique[0], clique[1])
但是我可能会遗漏一些重要的东西,因为这看起来很明显而且我不是专家 - 我只是阅读了networkx文档(它说一个集团是一个节点列表,remove_edge
需要两个节点)。