Python

Решить задачу питон

Даны множества A и B, состоящие соответственно из N1 и N2 точек (точки заданы своими координатами x, y). Найти минимальное расстояние между точками этих множеств и сами точки, расположенные на этом расстоянии (вначале выводится точка из множества A, затем точка из множества B).
Без ввода с консоли, точки задаются внутри программы:
 from math import sqrt

A = [[-1, 5], [6, 8], [1, 37]]
B = [[3, 0], [9, -1], [5, 11]]

def distSquare(a, b):
dx = a[0] - b[0]
dy = a[1] - b[1]
return dx * dx + dy * dy

ds = [(i, j, distSquare(A[i], B[j])) for i in range(len(A)) for j in range(len(B))]
md = min(ds, key = lambda t: t[2])
print(sqrt(md[2]), A[md[0]], B[md[1]])

Формируется произведение множеств (пары из каждой точки из A с каждой из B) с расстоянием между ними, затем находим минимум по квадрату расстояния (это где lambda t: t[2]). Из минимального расстояния извлекаем корень и печатаем его вместе с точками в указанном порядке.
Vagif Agamaliev
Vagif Agamaliev
54 053
Лучший ответ
Надо взять все возможные комбинации точек множеств А и В, рассчитать между ними расстояние по теореме Пифагора и выбрать минимальное
 
from itertools import product

A = [(-1, 5), (6, 8), (1, 37)]
B = [(3, 0), (9, -1), (5, 11), (0, 3)]

all_combinations = product(A,B)

def calc_length(t):
return ((t[0][0]-t[1][0])**2+(t[0][1]-t[1][1])**2)**0.5

min_distanse = 99999999
p = ''

for points in all_combinations:
length = calc_length(points)
if length < min_distanse:
min_distanse = length
p = points

print(min_distanse, *p)
Стоит отметить, что если будет два одинаковых минимальных расстояния, то в ответ попадёт первое встреченное.