Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.03.2015, 21:11
Аспирант
Отправить личное сообщение для Boolean_Type Посмотреть профиль Найти все сообщения от Boolean_Type
 
Регистрация: 02.02.2014
Сообщений: 48

В матрице значений найти маршрут с минимальным кол-вом значений.
Здравствуйте!
Есть задача: "Дана квадратная матрица 10х10, в которой указана стоимость проезда из города А в город В.
Найти маршрут, реализующий проезд из города в город за минимальную стоимость (реализовать задачу на HTML + javascript)".

Сначала думал обойти скриптом все возможные пути. Но понял, что это не оптимально, т.к. матрица может быть и больше. Скрипту в любом случае понадобится много времени, чтобы обойти все ходы, а это не норм. Нужен алгоритм.
Поискав задачи о маршрутизации, набрёл на теорию графов - а именно: алгоритм Дейкстры и иже с ним (хотя непонятно, что будет служить рёбрами графа), а также некий-то поток минимальной стоимости.
Дело в том, что я ни хрена не соображаю в этом. Отсюда вопрос: возможно ли это решить без применения дискретной математики? Может, кто сталкивался?
Ответить с цитированием
  #2 (permalink)  
Старый 22.03.2015, 14:59
Кандидат Javascript-наук
Отправить личное сообщение для Brutus Посмотреть профиль Найти все сообщения от Brutus
 
Регистрация: 24.11.2013
Сообщений: 127

Без математики только рекурсией, а это не самое оптимальное решение.

Используй алгоритм левита, благо инфы о нем на русском полно.

Для начала вот: https://ru.wikipedia.org/wiki/Алгоритм_Левита
Ответить с цитированием
  #3 (permalink)  
Старый 22.03.2015, 18:00
Аспирант
Отправить личное сообщение для Boolean_Type Посмотреть профиль Найти все сообщения от Boolean_Type
 
Регистрация: 02.02.2014
Сообщений: 48

Спасибо, но статьи из Вики об, опять же, графах, а также код на С# или С++ мне вряд ли поможет.
Я уже сталкивался с этой статьёй.
Ответить с цитированием
  #4 (permalink)  
Старый 23.03.2015, 20:05
Аспирант
Отправить личное сообщение для Boolean_Type Посмотреть профиль Найти все сообщения от Boolean_Type
 
Регистрация: 02.02.2014
Сообщений: 48

Попробовал следующим образом (исходный код можно увидеть здесь, я лишь добавил числа, которые будут "стоимостями" клеток; в исходном коде стоимость (cost, g-параметр) изначально равна 1). Ссылки на песочницы:
JS Bin
или codepen, код в них один и тот же, так что любая подойдёт для просмотра.

Таблица кликабельна, в ней ищется, как я писал, выше, кратчайший путь. Но вы можете заметить, что алгоритм отчего-то работает неверно. Может, у кого будут идеи?
Ответить с цитированием
  #5 (permalink)  
Старый 23.03.2015, 23:30
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

http://www.policyalmanac.org/games/a...torial_rus.htm
http://qiao.github.io/PathFinding.js/visual/
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #6 (permalink)  
Старый 24.03.2015, 00:59
Аспирант
Отправить личное сообщение для Boolean_Type Посмотреть профиль Найти все сообщения от Boolean_Type
 
Регистрация: 02.02.2014
Сообщений: 48

Спасибо Вам большое, но неужто Вы думаете, что я этого не видел?) Ещё как видел и читал)

В моём посте выше уже есть готовый код. У меня не было достаточно времени написать подобное самому с нуля, т.к. эта задача всё-таки не из простых. Но я попытался адаптировать код в ссылках выше под свою задачу, однако возникла проблема. Я уверен, что почти достиг цели, просто упорно не могу понять, где же я не так передаю данные (или вообще не передаю). По-моему, там проблема со стоимостью у соседей тек. элемента (но как её кодер устанавливал - хрен его знает).
Надеюсь, Вы или кто-либо другой подскажет, что не так в коде (я видел, тут такие волшебники бывают :-)) ).
А кидать ссылки на теорию лучше не нужно - я уже практически всё обшерстил, серьёзно)
Ответить с цитированием
  #7 (permalink)  
Старый 24.03.2015, 01:22
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Boolean_Type,
по ссылкам такое впечатление - что предыдущий найденный маршрут мешает поиску нового маршрута
Ответить с цитированием
  #8 (permalink)  
Старый 24.03.2015, 02:39
Аспирант
Отправить личное сообщение для Boolean_Type Посмотреть профиль Найти все сообщения от Boolean_Type
 
Регистрация: 02.02.2014
Сообщений: 48

рони, я ещё заметил при выводе в консоли значений соседей, что правильно устанавливаются только 2 из них - первые, а остальные почему-то 1.
Есть там метод Vertex:
PathFinding.Vertex = function(dest, cost) {
  
    this.cost = cost || 1;
    this.dest = dest;
    
};

..., явно в случаях двух последних (или одного - если квадрат к стенке прилегает) соседей cost не передаётся методу, т.е. устанавливается равным 1.
Ответить с цитированием
Ответ



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

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