实施Bron和x2013的一些变体;python中的Kerbosch算法

实施Bron和x2013的一些变体;python中的Kerbosch算法,python,Python,对于我试图实现的一个大学项目,我的代码在测试后并没有打印出所有答案。例如,graph=[[0,0,0,1,1,1,1],[0,0,1,1],[0,0,0,1,1,1,1],[1,1,0,0,0],[1,1,0,0,0],[1,1,1,1,0,0,0]他展示了: Clique found: [1, 4] Clique found: [1, 5] Clique found: [1, 6] Clique found: [2, 4] Clique found: [2, 5] Clique found:

对于我试图实现的一个大学项目,我的代码在测试后并没有打印出所有答案。例如,
graph=[[0,0,0,1,1,1,1],[0,0,1,1],[0,0,0,1,1,1,1],[1,1,0,0,0],[1,1,0,0,0],[1,1,1,1,0,0,0]
他展示了:

Clique found: [1, 4]
Clique found: [1, 5]
Clique found: [1, 6]
Clique found: [2, 4]
Clique found: [2, 5]
Clique found: [2, 6]
Clique found: [4, 3]
Clique found: [6, 3]
但正确的答案是(他忘了[3,5]):

到目前为止,我的代码是:

def集团(N,D,Z):
如果没有任何((N,D)):
文件_S=[]
对于范围内的i(len(S)):
文件附加(S[i]+1)
打印('找到集团:'+str(文件))
elif N:
对于N中的x:
视图(N、D、x)
如果Z不是无且x在Z中:
Z.移除(x)
Z_adj=adj(x,图)
对于范围内的i(len(Z_adj)):
如果Z不是None且Z_adj[i]在Z中:
移除(Z_adj[i])
而Z:
v=Z[0]
视图(N、D、v)
如果v在Z中:
Z=Z。移除(v)
def视图(N、D、v):
如果v在N中:
移除(v)
S.5(v)
N_v=Adj(v,图)
D_v=Adj(v,图)
N_adj=列表(集合(N)和集合(N_v))
D_adj=列表(集合(D)和集合(D_v))
派系(N_形容词,D_形容词,N_形容词)
S.删除(v)
D.5(v)
定义调整(v,X):
返回[i代表i,n_v在枚举中(X[v]),如果n_v]
图=[[0,0,0,1,1,1],[0,0,1,1,1],[0,0,0,1,1,1,1],[1,1,0,0],[1,1,1,0,0,0],[1,1,1,0,0,0]]
X=[]
对于范围内的i(len(图)):
十、追加(一)
S=[]
N=X.copy()
D=[]
Z=X.copy()
集团(N、D、Z)

有什么帮助吗?为什么我只能得到部分答案?

我不太喜欢这种基于副作用的风格,这让我很难理解。可能导致问题的一件事是,您正在对N中的x迭代
N
-
,然后在
视图()中修改相同的列表
-
如果N中的v:N。删除(v)
。这将导致未定义的行为。@AChampion感谢我修复了N[:]中x的大小写迭代
N
-
第二个问题呢?我不知道如何解决这个问题
[1, 4]
[1, 5]
[1, 6]
[2, 4]
[2, 5]
[2, 6]
[3, 4]
[3, 5]
[3, 6]