Показать сообщение отдельно
  #18 (permalink)  
Старый 21.06.2013, 03:40
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,127

Вариант с возвратом на 10 пар, алгоритм тотже ближайший сосед
маршрут выбран в результате
[[0,0],[50,10],[50,40],[74,40],[74,58],[94,103],[94,163],[54,163],[14,103],[14,58],[10,10],[0,0]]
немного походит на
Сообщение от Deff
по вершинам многоугольника максимально близкого к выпуклому
результат 452

var a = [[94,163], [14,58], [50,40], [14,103], [10,10], [74,58], [54,163], [94,103], [50,10], [74,40]];
var Lmin = 0,
    n = 0,
    f = [[0, 0]],ff = [[0,0]],
    N = a.length;
for (var i = 0; i < 5; i++) {

    var c = a[0][0] - f[0][0],
        d = a[0][1] - f[0][1],
        temp = Math.sqrt(c * c + d * d);

    for (var j = 1; j < a.length; j++) {

        c = a[j][0] - f[0][0],
        d = a[j][1] - f[0][1];

        if (Math.sqrt(c * c + d * d) < temp) {
            temp = Math.sqrt(c * c + d * d);
            n = j
        }
    }

    Lmin += temp
    f = a.splice(n, 1);
    n = 0;
    var c = a[0][0] - ff[0][0],
        d = a[0][1] - ff[0][1],
        temp = Math.sqrt(c * c + d * d);

    for (var j = 1; j < a.length; j++) {

        c = a[j][0] - ff[0][0],
        d = a[j][1] - ff[0][1];

        if (Math.sqrt(c * c + d * d) < temp) {
            temp = Math.sqrt(c * c + d * d);
            n = j
        }
    }

    Lmin += temp
    ff = a.splice(n, 1);
    n = 0;
}
    c = f[0][0] - ff[0][0],
        d = f[0][1] - ff[0][1];
        temp = Math.sqrt(c * c + d * d);
        Lmin += temp
alert(Math.round(Lmin))
Ответить с цитированием