Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Алгоритмы решения задач (https://javascript.ru/forum/offtopic/39214-algoritmy-resheniya-zadach.html)

рони 21.06.2013 00:20

Hekumok, начинаем с 0,0
тупой перебор всех точек до которой короче - её запоминаем - записываем растояние -- запомненную точку убираем из массива -- ищем до какой короче ... и т.д.

рони 21.06.2013 00:33

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>

Hekumok 21.06.2013 00:37

рони, понял, спасибо :)

Hekumok 21.06.2013 02:07

Дзен-трансгуманист, спасибо за ссылки)
рони, вашим способом получается 406(

Deff 21.06.2013 02:19

Hekumok,
Про деревья вроде кратчайший путь,(если круговой с возвратом к калитке), по вершинам многоугольника максимально близкого к выпуклому

Hekumok 21.06.2013 02:28

Deff, я чё-т не представляю, как это сделать :blink:

рони 21.06.2013 03:30

Цитата:

Сообщение от Hekumok
вашим способом получается 406

это как?

рони 21.06.2013 03:40

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

Deff 21.06.2013 05:10

Цитата:

Сообщение от рони
результат 452

Для анализа действий желательно для начала построить картинку - карту точек

Hekumok 21.06.2013 08:45

Цитата:

Сообщение от рони
это как?

Ну, вашим способом + возврат в [0, 0]


Часовой пояс GMT +3, время: 07:35.