@DBedrenko Потому что, если вы рисуете его прямо, он пересечет ранее нарисованные линии. Я считаю, что кривая заставляет его выглядеть немного лучше. В строке, последней для последней, измените последний параметр draw_arrow на 0, если вы хотите, чтобы он был прямым.

ющий псевдокод взят из первой главы онлайн-версии предварительного просмотраРуководство по разработке алгоритма (страница 7 отэтот PDF).

Пример ошибочного алгоритма, но я все еще очень хочу его понять:

[...] Другая идея может состоять в том, чтобы повторно соединять ближайшую пару конечных точек, чье соединение не создаст проблемы, такой как преждевременное завершение цикла. Каждая вершина начинается как отдельная цепочка вершин. После слияния всего мы получим одну цепочку, содержащую все точки в ней. Соединение двух конечных точек дает нам цикл. На любом этапе выполнения этой эвристики ближайшей пары мы будем иметь набор отдельных вершин и цепочек, не связанных с вершинами, доступных для слияния. В псевдокоде:

ClosestPair(P)
    Let n be the number of points in set P.
    For i = 1  to n − 1 do
        d = ∞
        For each pair of endpoints (s, t) from distinct vertex chains
            if dist(s, t) ≤ d then sm = s, tm = t, and d = dist(s, t)
        Connect (sm, tm) by an edge
    Connect the two endpoints by an edge

Обратите внимание, чтоsm а такжеtm должно бытьsm а такжеtm.

Прежде всего, я не понимаю, что означает «из разных цепочек вершин». Во-вторых,i используется в качестве счетчика во внешнем цикле, ноi сам никогда на самом деле никогда не используется нигде! Может ли кто-нибудь умнее меня объяснить, что на самом деле здесь происходит?

Ответы на вопрос(3)

Ваш ответ на вопрос