我有这个问题需要帮助,这是我的代码:

      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完全的。

10-06 06:29