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, время: 07:35. |