我有这个问题需要帮助,这是我的代码:
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)。
我该怎么做?
感谢
最佳答案
我认为这里最棘手的问题是处理共享边。你不想每次删除一条边时都搜索团,但你需要记住哪些边已经删除。
观察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完全的。