Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def cmp(a):
- return len(a)
- def check(candidates, wrong, g):
- for v in wrong:
- cnt = 0
- for u in candidates:
- if g[v][u] == 1:
- cnt += 1
- if cnt == len(candidates):
- return False
- return True
- def find_clique(compsub, candidates, wrong, g, res):
- while len(candidates) and check(candidates, wrong, g):
- v = candidates[0]
- compsub.append(v)
- new_candidates = list()
- for elem in candidates:
- if g[elem][v] == 1 and elem != v:
- new_candidates.append(elem)
- new_wrong = list()
- for elem in wrong:
- if g[elem][v] == 1 and elem != v:
- new_wrong.append(elem)
- if len(new_candidates) == 0 and len(new_wrong) == 0:
- res.append(list(compsub))
- else:
- find_clique(compsub, new_candidates, new_wrong, g, res)
- compsub.remove(v)
- candidates.remove(v)
- wrong.append(v)
- print('Enter filename:')
- filename = input()
- print('Enter num of cliques')
- k = int(input())
- num_of_ver = 0
- edges = []
- with open(filename, 'r') as f:
- num_of_ver, num_of_edges = map(int, f.readline().split())
- for _ in range(num_of_edges):
- edges.append(tuple(map(int, f.readline().split())))
- print(num_of_ver)
- print(len(edges))
- g = [[0] * num_of_ver for i in range(num_of_ver)]
- for elem in edges:
- g[elem[0]][elem[1]] = 1
- g[elem[1]][elem[0]] = 1
- ans = []
- find_clique([], list(range(num_of_ver)), [], g, ans)
- ans.sort(key=cmp, reverse=True)
- ans = ans[:k]
- for elem in ans:
- print(*elem)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement