Advertisement
Guest User

Untitled

a guest
Oct 18th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.62 KB | None | 0 0
  1. def cmp(a):
  2.     return len(a)
  3.  
  4. def check(candidates, wrong, g):
  5.     for v in wrong:
  6.         cnt = 0
  7.         for u in candidates:
  8.             if g[v][u] == 1:
  9.                 cnt += 1
  10.         if cnt == len(candidates):
  11.             return False
  12.  
  13.     return True
  14.  
  15.  
  16. def find_clique(compsub, candidates, wrong, g, res):
  17.     while len(candidates) and check(candidates, wrong, g):
  18.         v = candidates[0]
  19.         compsub.append(v)
  20.         new_candidates = list()
  21.         for elem in candidates:
  22.             if g[elem][v] == 1 and elem != v:
  23.                 new_candidates.append(elem)
  24.  
  25.         new_wrong = list()
  26.         for elem in wrong:
  27.             if g[elem][v] == 1 and elem != v:
  28.                 new_wrong.append(elem)
  29.  
  30.         if len(new_candidates) == 0 and len(new_wrong) == 0:
  31.             res.append(list(compsub))
  32.         else:
  33.             find_clique(compsub, new_candidates, new_wrong, g, res)
  34.  
  35.         compsub.remove(v)
  36.         candidates.remove(v)
  37.         wrong.append(v)
  38.  
  39.  
  40. print('Enter filename:')
  41. filename = input()
  42. print('Enter num of cliques')
  43. k = int(input())
  44.  
  45. num_of_ver = 0
  46. edges = []
  47. with open(filename, 'r') as f:
  48.     num_of_ver, num_of_edges = map(int, f.readline().split())
  49.     for _ in range(num_of_edges):
  50.         edges.append(tuple(map(int, f.readline().split())))
  51.  
  52. print(num_of_ver)
  53. print(len(edges))
  54.  
  55. g = [[0] * num_of_ver for i in range(num_of_ver)]
  56. for elem in edges:
  57.     g[elem[0]][elem[1]] = 1
  58.     g[elem[1]][elem[0]] = 1
  59.  
  60. ans = []
  61. find_clique([], list(range(num_of_ver)), [], g, ans)
  62. ans.sort(key=cmp, reverse=True)
  63. ans = ans[:k]
  64. for elem in ans:
  65.     print(*elem)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement