如何修改Bron-KerBosch算法以根据集团大小输出集团列表列表(或列表字典)?
例如对于此处-https://stackoverflow.com/a/59339555/7865680的参考实现,
N = {
i: set(num for num, j in enumerate(row) if j)
for i, row in enumerate(adj_matrix)
}
print(N)
# {0: {1, 4}, 1: {0, 2, 4}, 2: {1, 3}, 3: {2, 4, 5}, 4: {0, 1, 3}, 5: {3}}
def BronKerbosch1(P, R=None, X=None):
P = set(P)
R = set() if R is None else R
X = set() if X is None else X
if not P and not X:
yield R
while P:
v = P.pop()
yield from BronKerbosch1(
P=P.intersection(N[v]), R=R.union([v]), X=X.intersection(N[v]))
X.add(v)
P = N.keys()
print(list(BronKerbosch1(P)))
# [{0, 1, 4}, {1, 2}, {2, 3}, {3, 4}, {3, 5}]
查看图表
它应该输出,而不是
[{0, 1, 4}, {1, 2}, {2, 3}, {3, 4}, {3, 5}]
列表列表(集)
[ [[1, 2], [2, 3], [3, 4], [3, 5]], [[0, 1, 4]] ]
个
或列表(集合)的词典
{ "2": [[1, 2], [2, 3], [3, 4], [3, 5]], "3": [[0, 1, 4]]]