Вариант с возвратом на 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))