我认为这里最棘手的问题是处理共享边缘.每次删除边缘时都不想搜索派系,但是您需要记住已经删除的边缘.
查看the documentation,我们发现find_cliques函数是一个生成器.
This implementation is a generator of lists each of which contains the
members of a maximal clique
这是否意味着您可以生成一个集团,删除边缘,然后生成下一个集团,我们的生成器会知道我们已经删除了边缘?
用另一个问题回答这个问题:为什么不在每次分解集团时突破发电机?
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完全的.