Как разрешить максимальное манхэттенское расстояние между всеми точками в группе
У меня есть 2D-массив, в котором я хочу создать группы, в которых все точки в группе имеют максимальное манхэттенское расстояние между ними. Группы могут быть непересекающимися. Например, из этого начального массива (10 x 10):
[[ 67 97 72 35 73 77 80 48 21 34]
[ 11 30 16 1 71 68 72 1 81 23]
[ 85 31 94 10 50 85 63 11 61 69]
[ 64 36 8 37 36 72 96 20 91 19]
[ 99 54 84 56 3 80 41 45 1 8]
[ 97 88 21 8 54 55 88 45 63 82]
[ 13 53 1 90 39 28 48 15 86 8]
[ 26 63 36 36 3 29 33 26 54 58]
[ 74 40 53 12 21 17 4 87 14 22]
[ 23 98 3 100 85 12 65 21 83 97]]
Я должен быть в состоянии разделить его на разные группы.
В настоящее время у меня есть функция, которая находит возможные точки, которые я мог бы добавить в группу с начальной точкой (здесь
def possible_munips(x, y, munip, dist_manhattan_max, temp_array):
list = []
for i in range(y):
for j in range(x):
if (j, i) != munip and munipIsValid(j, i, munip, dist_manhattan_max) and temp_array[i][j] != -1:
list.append((j, i, temp_array[i][j]))
Я перебираю 2D-массив,
Затем я просто добавляю точки одну за другой, пока не достигну нужной длины (
munips = possible_munips(x, y, munip, dist_manhattan_max, temp_array)
while len(new_group) < k:
point = munips[0]
new_group.append(point)
if not groupIsValid(new_group, distManhattanMax, len(new_group)):
new_group.remove(point)
munips.remove(point)
current_sol.append(new_group)
for groups in current_sol:
for munip in groups:
temp_array[munip[1], munip[0]] = -1
Я также попытался добавить функцию обмена, которая пытается поменять местами точки между группами, чтобы сделать их обе действительными. Но иногда это не находит решения, и я остаюсь с недействительной группой.