def clique(U, size): # print(U) global max_, c, found, X, OptClique global backtrack backtrack = backtrack + 1 if U == None or len(U) == 0: if size > max_: max_ = size OptClique = X.copy() found = True return while len(U) != 0: if size + len(U) <= max_: return #assuming vertices start from 0 ... n i = min(U) - 1 if size + c[i] <= max_: return U.remove(v[i]) X[size] = v[i] if U == None or len(U) == 0: clique([], size + 1) else: clique(compAB(v[i], U, graph), size + 1) if found == True: return return
def maxCliques(l): global backtrack backtrack = backtrack + 1 global OptSize, X, OptClique if l > OptSize: OptSize = l OptClique = X.copy() #remove 0s # OptClique = [i for i in OptClique if i != 0] if l > 0: # check append, add in specific location, do initial array initialization C[l] = (compAB(X[l - 1], C[l - 1], graph)) # adding bounding M = l + len(C[l]) for i in C[l]: if M <= OptSize: # print("**") return # print(X, l) X[l] = i maxCliques(l + 1) # do not erase the values of X, you can save the partial solution # X = [0]*(n) # X = [] return
def maxCliques(l): global backtrack backtrack = backtrack + 1 global OptSize, X, OptClique if l > OptSize: OptSize = l OptClique = X.copy() if l > 0: # remove append, add in specific location, do initial array initialization C[l] = compAB(X[l - 1], C[l - 1], graph) # adding bounding M = l + len(C[l]) for i in C[l]: if M <= OptSize: # print("bound", M) return X[l] = i maxCliques(l + 1) # do not erase the values of X, you can save the partial solution return
string_edges = open('./graphs/brock/brock200_4.clq', 'r').read() v = 0 edges = [] no_of_vertices = 0 processed_graph = Convert(string_edges) edges = processed_graph['edges'] no_of_vertices = processed_graph['no_of_vertices'] n = no_of_vertices v = list(range(1, no_of_vertices + 1)) graph = [[0 for i in range(n)] for j in range(n)] for i in edges: v1 = i[0] v2 = i[1] graph[v1 - 1][v2 - 1] = 1 graph[v2 - 1][v1 - 1] = 1 c = [[0]] * (n) X = [0] * (n) for i in range(n - 1, -1, -1): found = False X[0] = i + 1 clique(compAB(v[i], Si(i, v), graph), 1) c[i] = max_ print("\nTime taken to execute - %s seconds\n" % (time.time() - start_time)) # print("Max Clique = ",OptClique) while OptClique[-1] == 0: OptClique.pop() print("Clique size - ", len(OptClique)) print("Max Clique - ", OptClique) print("Backtracking nodes - ", backtrack)