最大团和极大团不一样,该算法应该是极大团算法
Bron-Kerbosch算法
Input: The graph G
Output: the set of all maximal cliques: C
1: Initialize C and two vertex sets R, X with ∅
2: Define P ← the node set of G
3: function BRONKER(R, P, X):
4: if P = ∅ & X= ∅
5: then Add R to C
6: end if
7: for v ∈ P do
8: Define N(v) ← the neighbor set of v
9: BRONKER( R ∪ v, P ∩ N(v), X ∩ N(v))
10: P ← P \ v
11: X ← X ∪ v
12: end for
13: end function
14: BRONKER(R, P, X)
15: return C
算法的原理:
R是一个团,不断查找这个团中元素共同的邻居,形成一个极大团。而P则是R中元素的共同邻居集合,所以P中的每一个元素 v 都符合条件可以扩充R的团,对于P中的每一个元素 v ,将其加入R,则扩充后的团的共同邻居集合需要更新,需要找出R和 v 共同的邻居,即原始团R的共同邻居集合P和扩充该团的元素 v 的邻居集的交集。
在包含 v 的极大团被搜索之后,就将 v 从P中去掉,否则可能在后续搜索 v 的邻居节点 v' 的时候,又将包含 v 的极大团整了一遍。集合X中的元素a就是表示团R的共同邻居中,a的团已经搜索过了。P为空时,则X也为空