Нужен алгоритм.
Вход — двухмерный массив точек.
Выход — порядок обхода этих точек, исходя из следующих критериев:
Минимальное расстояние. Под "расстоянием" имеется в виду "манхэттенское расстояние", т.е. dist (x, y, x1, y1) = abs(x — x1) + abs (y — y1). Ещё лучше, если расстояние по у будет в 2 (например) раза больше реального, или, в общем виде, dist (x, y, x1, y1) = M * abs(x — x1) + N * abs (y — y1).
Строго горизонтальное или строго вертикальное направление является приоритетным, сохраняя приоритет M:N.
Стараться избегать возвращения в точку, возле которой уже были после большого кол-ва шагов. (Это требование весьма низкоприоритетно и вытекает из того, что точность девайса не бесконечна и может быть погрешность, которая будет особенно заметна на замкнутых фигурах).
Самое непонятное тут, как изначально организовать точки. Если какой-нибудь алгоритм (Форда, если не ошибаюсь) из теории графов для нахождения минимальных расстояний между всеми точками, то ему нужно O(n^3), а при входе O(10^5) это очень дорого, но в крайнем случае, подойдёт. Кроме того, как эффективно построить граф из массива точек.
Какие-то идеи?
Заранее спасибо,
fAX.
...Complex problems have simple, easy-to-understand wrong answers...
(Grossman's Misquote of H.L.Mencken)