Как правильно использовать цикл, чтобы найти кратчайший маршрут между несколькими координатами? - PullRequest
1 голос
/ 24 апреля 2019

У меня есть массив объектов, каждый из которых содержит координаты x, y.Я хотел бы рассчитать кратчайший путь между объектами в JavaScript.

Массив островов также всегда будет случайным, поэтому маршрут должен рассчитываться динамически.

Мне не удалось правильно реализоватьАлгоритм Дейкстры в JavaScript.Я пытался использовать несколько алгоритмов поиска путей из других языков и был неудачным.

Объекты в массиве

var selected_islands= [{
   id: 0,
   name: "Island1",
   x: 212,
   y: 1271,
   size: 50,
}, {
   id: 1,
   name: "Island2",
   x: 495,
   y: 226,
   size: 15,
}, {
   id: 2,
   name: "Island3",
   x: 473,
   y: 832,
   size: 25,
}]

Запуск метода на всех островах в массиве

 for (i in selected_islands) {
      duped = selected_islands[i].findClosestIsland(duped);
      console.log(duped);
   }

Внутри моего Island Class

compareDistance(island) {
      return this.pythagoreanTheorem(island.x, island.y);
   }

findClosestIsland(duped) {
      var lowest_val = Number.MAX_SAFE_INTEGER; // Setting high initial value
      for (i in duped) {
         if (this.compareDistance(selected_islands[i]) < lowest_val && this.compareDistance(selected_islands[i]) != 0) {
            lowest_val = this.compareDistance(selected_islands[i]);
            closest_island = selected_islands[i];
         }
      }
      duped.splice(0,1); // Immutable, ruins array
      return duped;
   }

метод соединения разрушает мой дублированный массив.Логика немного нечеткая для меня.Должен ли я создать новый массив "посещенных островов" и проходить через него каждый раз?

Canvas Output

Спасибо за понимание:)

...