给定一个无向图,我需要找到最大的集团。我要做的是首先找到它的大小(即有多少顶点/节点)。这样做时,我删除了不属于最大集团的所有节点(即,如果最大大小为 3,我将删除所有只有一个相邻节点的节点,因为它们不能成为这个更大集团的一部分)。
这是我的代码:
def find_largest_clique(graph):
def clique_size(graph, k):
all_nodes = graph.nodes[:]
'''TO CHECK IF CURRENT NUMBER OF NODES IS LESS THAN K, RETURN FALSE'''
if len(all_nodes) < k:
return False
current_nodes = all_nodes[:]
for nodes in current_nodes:
adj_nodes = graph.adjacent_nodes(nodes)
if len(adj_nodes) < k - 1:
all_nodes.remove(nodes)
graph.remove_node(nodes)
if len(all_nodes) < k:
return False
return True
clique = []
all_nodes = graph.nodes[:]
print(all_nodes)
if len(all_nodes) < 2:
return None
'''FIND LARGEST CLIQUE SIZE'''
k = 2
while clique_size(graph, k):
k += 1
k -= 1
print(k)
if graph is None:
return None
'''FIND CLIQUE'''
remaining_nodes = graph.nodes[:]
for nodes in remaining_nodes:
if graph.adjacent_nodes(nodes) == []:
graph.remove_node(nodes)
if graph.nodes == []:
return None
clique = graph.nodes[:]
print(clique)
return clique
我正在通过 Udemy 课程的在线检查器提交,结果如下:
['A', 'B']
k = 2
['A', 'B'] **PASSED**
['A', 'B', 'C']
k = 3
['A', 'B', 'C'] **PASSED**
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
k = 26
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] **PASSED**
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'Y', 'Z', 'X']
k = 20
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T'] **PASSED**
['A', 'B', 'C', 'D', 'a', 'b', 'c', 'd', 'e', 'f']
k = 6
['a', 'b', 'c', 'd', 'e', 'f'] **PASSED**
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K']
3
[] **FAILED, NONETYPE OBJECT NOT ITERABLE**