Я хотел бы найти лучший алгоритм для решения следующей проблемы:
В 2D есть N начальных точек (фиолетовый) и N целевых точек (зеленый). Я хочу алгоритм, который соединяет исходные точки с целевыми точками отрезком (коричневым), без какого-либо из этих сегментов, пересекающихся (красным) и минимизируя кумулятивную длину всех сегментов.
Моя первая попытка в С++ заключалась в перестановке всех возможных состояний, поиске состояний, свободных от пересечений, и среди тех, у которых минимальная общая длина сегмента O (n!). Но я думаю, что должен быть лучший способ.
Любая идея? Или хорошие ключевые слова для поиска?