Hekumok, начинаем с 0,0
тупой перебор всех точек до которой короче - её запоминаем - записываем растояние -- запомненную точку убираем из массива -- ищем до какой короче ... и т.д. |
Hekumok, мой вариант
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
</head>
<body>
<script>
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]],
N = a.length;
for (var i = 0; i < N; 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
}
}
document.write(f + "<br>" + temp + "<br>")
Lmin += temp
f = a.splice(n, 1);
n = 0;
}
document.write(f + "<br>" + Math.round(Lmin))
</script>
</body>
</html>
|
рони, понял, спасибо :)
|
Дзен-трансгуманист, спасибо за ссылки)
рони, вашим способом получается 406( |
Hekumok,
Про деревья вроде кратчайший путь,(если круговой с возвратом к калитке), по вершинам многоугольника максимально близкого к выпуклому |
Deff, я чё-т не представляю, как это сделать :blink:
|
Цитата:
|
Вариант с возвратом на 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]] немного походит на Цитата:
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))
|
Цитата:
|
Цитата:
|
| Часовой пояс GMT +3, время: 15:51. |