test/3D.py
2026-07-01 19:46:51 +03:00

33 lines
No EOL
650 B
Python

data = open(0).read().split()
if not data:
exit()
n = int(data[0])
x = [0] * n
y = [0] * n
idx = 1
for i in range(n):
x[i] = int(data[idx])
y[i] = int(data[idx+1])
idx += 2
s = int(data[idx]) - 1
t = int(data[idx+1]) - 1
INF = 10**18
D = [INF] * n
D[s] = 0
unvisited = list(range(n))
get_D = D.__getitem__
while unvisited:
u = min(unvisited, key=get_D)
if u == t or D[u] == INF:
break
unvisited.remove(u)
du = D[u]
xu = x[u]
yu = y[u]
for v in unvisited:
dx = xu - x[v]
dy = yu - y[v]
cost = du + dx * dx + dy * dy
if cost < D[v]:
D[v] = cost
print(D[t])