주어진 그래프에서 모든 최대 클럭을 나열하는 Bron–Kerbosch algorithm을 구현하려고합니다.파이썬에서 Bron-Kerbosch 알고리즘 구현 대학 프로젝트 용
는내가 (회전없이) 최초의 알고리즘을 구현하기 위해 노력하고있어,하지만 내 코드는 Wikipedia's example에서 테스트 한 후 모든 해답을 얻을하지 않습니다, 내 코드는 지금까지 있습니다 :
# dealing with a graph as list of lists
graph = [[0,1,0,0,1,0],[1,0,1,0,1,0],[0,1,0,1,0,0],[0,0,1,0,1,1],[1,1,0,1,0,0],[0,0,0,1,0,0]]
#function determines the neighbors of a given vertex
def N(vertex):
c = 0
l = []
for i in graph[vertex]:
if i is 1 :
l.append(c)
c+=1
return l
#the Bron-Kerbosch recursive algorithm
def bronk(r,p,x):
if len(p) == 0 and len(x) == 0:
print r
return
for vertex in p:
r_new = r[::]
r_new.append(vertex)
p_new = [val for val in p if val in N(vertex)] # p intersects N(vertex)
x_new = [val for val in x if val in N(vertex)] # x intersects N(vertex)
bronk(r_new,p_new,x_new)
p.remove(vertex)
x.append(vertex)
bronk([], [0,1,2,3,4,5], [])
어떤 도움 왜 나는 대답의 일부만을 얻고 있는가?
우선 - 값 비교를 위해'is'를 사용하지 마십시오. 즉, ==는 –
입니다. 부작용이있는 재귀를 사용하지 말 것을 권장합니다. 재귀 자체는 머리를 들이기에 까다 롭습니다. !). * 또한 목록 작성 및 ['enumerate'] (http://docs.python.org/2/library/functions.html#enumerate)를 사용하여'N '이라고 쓸 수 있습니다. * –