Advertisement
asdadsada

Untitled

Oct 16th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.64 KB | None | 0 0
  1. def cluster2(ver, eds, num_of_clusters):
  2. centers = [0]
  3. count_now = 1
  4. n = len(ver)
  5. used = [False] * n
  6. used[0] = True
  7. while count_now < num_of_clusters:
  8. max_eds = []
  9. for i in range(n):
  10. if not used[i]:
  11. min_eds = []
  12. for v in centers:
  13. for edg in eds:
  14. if edg[1] == min(i, v) and edg[2] == max(i, v):
  15. min_eds.append(edg)
  16. min_ed = min_eds[0]
  17. for j in range(len(min_eds)):
  18. if min_eds[j][0] < min_ed[0]:
  19. min_ed = min_eds[j]
  20. max_eds.append(min_ed)
  21. max_ed = max_eds[0]
  22. for j in range(len(max_eds)):
  23. if max_eds[j][0] > max_ed[0]:
  24. max_ed = max_eds[j]
  25. u, v = max_ed[1], max_ed[2]
  26. next_centr = u
  27. if u in centers:
  28. next_centr = v
  29. centers.append(next_centr)
  30. count_now += 1
  31. used[next_centr] = True
  32. res = DisjointSetUnion(len(ver))
  33. tmp = []
  34. for i in range(n):
  35. if not used[i]:
  36. for v in centers:
  37. for edg in eds:
  38. if edg[1] == min(i, v) and edg[2] == max(i, v):
  39. tmp.append(edg)
  40. min_ed = tmp[0]
  41. for j in range(len(tmp)):
  42. if tmp[j][0] < min_ed[0]:
  43. min_ed = tmp[j]
  44. u, v = min_ed[1], min_ed[2]
  45. root = u
  46. if root not in centers:
  47. root = v
  48. res.union_sets(i, root)
  49. print(centers)
  50. return res
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement