我正在尝试为一组项目找到最大的集团。
目前我正在使用python的networkx库并使用find_cliques()函数来查找所有最大派系,如下所示:
import newtworkx as nx
G = nx.Graph()
E = [[1,2], [1,3], [1,4], [2,3], [2,4], [3,4], [2,6], [2,5], [5,6]]
G.add_edges_from(E)
#G.edges()
lst = list(nx.find_cliques(G))
lst
Out [] : [[2, 1, 3, 4], [2, 5, 6]]
但我实际上期望的是找到最大团,然后删除最大团图中的节点,然后再次从先前删除后留下的节点中找到最大团。
对于上面的例子,我希望得到 [2, 1, 3, 4] 然后删除这些节点,所以只剩下 5 和 6 ,这将是另一个集团 [5, 6] 。
更新
我们可以使用G.remove_node(),它按预期删除节点以及所有相邻边。
G = nx.Graph()
E = [[1,2], [1,3], [1,4], [2,3], [2,4], [3,4], [2,6], [2,5], [5,6], [3,5], [5,7]]
G.add_edges_from(E)
list1 = list(nx.find_cliques(G))
#list1 gives [[2, 3, 1, 4], [2, 3, 5], [2, 6, 5], [7, 5]]
n = nx.number_of_nodes(G)
#n
[G.remove_node(nd) for nd in list1[0]]
list2 = list(nx.find_cliques(G))
#list2 gives [[5, 6], [5, 7]]
[G.remove_node(nd) for nd in list2[0]]
list3 = list(nx.find_cliques(G))
#list3 gives [[7]]
但是每次删除节点时,都会找到新的最大团并将其存储在新列表中,依此类推。如何在 while 循环中运行,直到图 G 中没有边,即节点数为 0 或 1。