Реконструкция выпуклого многоугольника по набору расстояний
Python
Сложный
math
Задача «Реконструкция выпуклого многоугольника по набору расстояний»
Дан набор из N точек на плоскости, образующих выпуклый многоугольник в порядке обхода. Известны все попарные расстояния между вершинами, но порядок следования точек неизвестен. Необходимо восстановить исходный порядок вершин (их номера от 1 до N) так, чтобы полученный многоугольник был выпуклым и имел те же попарные расстояния. Гарантируется, что решение единственно. Выведите номера вершин в порядке обхода по часовой стрелке, начиная с вершины с минимальным номером.
Формат ввода
Первая строка содержит целое число N (3 ≤ N ≤ 100). Следующие N строк содержат по N целых чисел — матрицу расстояний A, где A[i][j] = A[j][i] — квадрат евклидова расстояния между i-й и j-й вершиной (0 ≤ A[i][j] ≤ 10^9). Диагональные элементы равны 0. Матрица симметрична.
Формат вывода
Выведите N чисел — номера вершин в порядке обхода по часовой стрелке, начиная с минимального номера. Если восстановить многоугольник невозможно, выведите -1.
Примеры
Пример 1
ВВОД
4
0 1 4 1
1 0 1 4
4 1 0 1
1 4 1 0
ВЫВОД
1 2 3 4
Пример 2
ВВОД
5
0 2 5 5 2
2 0 2 5 5
5 2 0 2 5
5 5 2 0 2
2 5 5 2 0
ВЫВОД
1 2 3 4 5
Пример 3
ВВОД
5
1 2 3 4 5
5
3 4 5 6 7
ВЫВОД
main.py