Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 21.06.2013, 00:20
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Hekumok, начинаем с 0,0
тупой перебор всех точек до которой короче - её запоминаем - записываем растояние -- запомненную точку убираем из массива -- ищем до какой короче ... и т.д.
Ответить с цитированием
  #12 (permalink)  
Старый 21.06.2013, 00:33
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

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>

Последний раз редактировалось рони, 21.06.2013 в 00:35.
Ответить с цитированием
  #13 (permalink)  
Старый 21.06.2013, 00:37
Аватар для Hekumok
Отправить личное сообщение для Hekumok Посмотреть профиль Найти все сообщения от Hekumok
 
Регистрация: 04.06.2012
Сообщений: 513

рони, понял, спасибо
__________________
★ ²º¹³ ☆
Ответить с цитированием
  #14 (permalink)  
Старый 21.06.2013, 02:07
Аватар для Hekumok
Отправить личное сообщение для Hekumok Посмотреть профиль Найти все сообщения от Hekumok
 
Регистрация: 04.06.2012
Сообщений: 513

Дзен-трансгуманист, спасибо за ссылки)
рони, вашим способом получается 406(
__________________
★ ²º¹³ ☆
Ответить с цитированием
  #15 (permalink)  
Старый 21.06.2013, 02:19
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Hekumok,
Про деревья вроде кратчайший путь,(если круговой с возвратом к калитке), по вершинам многоугольника максимально близкого к выпуклому
Ответить с цитированием
  #16 (permalink)  
Старый 21.06.2013, 02:28
Аватар для Hekumok
Отправить личное сообщение для Hekumok Посмотреть профиль Найти все сообщения от Hekumok
 
Регистрация: 04.06.2012
Сообщений: 513

Deff, я чё-т не представляю, как это сделать
__________________
★ ²º¹³ ☆
Ответить с цитированием
  #17 (permalink)  
Старый 21.06.2013, 03:30
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

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

Вариант с возвратом на 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))
Ответить с цитированием
  #19 (permalink)  
Старый 21.06.2013, 05:10
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от рони
результат 452
Для анализа действий желательно для начала построить картинку - карту точек
Ответить с цитированием
  #20 (permalink)  
Старый 21.06.2013, 08:45
Аватар для Hekumok
Отправить личное сообщение для Hekumok Посмотреть профиль Найти все сообщения от Hekumok
 
Регистрация: 04.06.2012
Сообщений: 513

Сообщение от рони
это как?
Ну, вашим способом + возврат в [0, 0]
__________________
★ ²º¹³ ☆
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изучить алгоритмы Ridjie Учебные материалы 13 29.05.2013 17:53
Не удается выполнить пример из учебника (Node.JS для решения задач) Drygba AJAX и COMET 9 13.04.2013 15:19
Как написать в панель задач Averin500 Events/DOM/Window 3 05.01.2013 22:20
Варианты решения задачи bobri4 Элементы интерфейса 1 07.10.2009 01:41
Помогите решить несколько мат. задач в javascript 4_omd Общие вопросы Javascript 5 02.05.2009 12:02