Для решения данной задачи можно использовать следующий алгоритм. Пусть всего у нас N точек и они соединены последовательно. Выберем 3 числа K,L,M. Возьмем точку с номером K. Вырежем цепочку точек начиная с K-й и всего L(L было ограничено значением N/3). Точку с номером K-1 cоединим с точкой с номером K+L, а вырезанную цепочку(возможно в обратном порядке) вставим в разрыв между точками с номерами K+L+M и K+L+M+1 (все числа берутся по модулю N). Посмотрим улучшился ли результат. Находим тройку (K,L,M) при которой происходит максимальное сокращение общей длины и производим перестановку. Повторяем эту прцедуру до тех пор пока такую тройку чисел еще можно найти. Результат получается вполне удовлетворительный. Для 20 точек ответ получается мгновенно, для 50 программа работает несколько минут.
Более быстрые алгоритмы для большого количества точек давали гораздо худший результат. В данном случае визуально результат кажется оптимальным.
//текст доступен после регистрации//