Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from math import dist
- data = open('').readlines()[1:]
- n = len(data)
- for i in range(n):
- #data[i] = list(map(int, data[i].split()))
- data[i] = list(map(float, data[i].replace(',', '.').split()))
- cen = [(3.0, 2.5), (1.4, 5), (3.5, 0.2)]
- delta = 10^-4
- for _ in range(50):
- prev_cen = cen.copy()
- cl = [[], [], []]
- for e in data:
- rst = [dist(e, cen[0]), dist(e, cen[1]), dist(e, cen[2])]
- cl[rst.index(min(rst))].append(e)
- for i in range(3):
- c = (-1, -1)
- mn_rst = 100000000000000
- for cur_c in cl[i]:
- rst = 0
- for e in cl[i]:
- rst += dist(cur_c, e)
- if rst < mn_rst:
- c = cur_c
- mn_rst = rst
- cen[i] = c
- cur_detla = max(dist(prev_cen[0], cen[0]), dist(prev_cen[1], cen[1]), dist(prev_cen[1], cen[1]))
- if cur_detla < delta:
- break
- print(int(((cen[0][0] + cen[1][0] + cen[2][0]) / 3) * 10000), int(((cen[0][1] + cen[1][1] + cen[2][1]) / 3) * 10000))
Advertisement
Add Comment
Please, Sign In to add comment