Поиск кротчайшего пути
помогите написать на javascript код нахождения пути условия карта прямоугольная разбитая на квадраты количество квадратов по линии х и по линии y известно попадаються непроходимые участки пожно переходить с одной клетки на другую как по диагонали, вертикали и горизонтали время перехода различно и закреплено за каждой клеткой (переход из клетки в соседнии по времени одинаково а уже переход из соседней клетки в другие будет отличаться) помогите кодом плз с описанием я пока новичек
|
А теперь то же самое, но со знаками препинания. Их не просто так в школе проходят. Это читать невозможно.
|
+1 к вопросу о знаках препинания.
но кажется я догадался что вам надо. Это класическая алгоритмическая задача, рассмотренная неймоверное количество раз практически на всех живых языках, и рискну предположить на некоторых эзотерических. Как вывод: 1)Ищите лучше.В сети уже есть решение, навреняка и на JS 2)Есть куча книг по алгоритмам, где есть описание решения этой задачи на словах, и как правило на одном-двух языках програмирования. Как правило этого вполне достаточно, чтобы написать реализацию на своем языке. Сам алгоритм вашей задачи решается класически с помощью рекурсии. рекурсивно обходите все возможные пути, на каждой итерации рекурсии, совершая переходы из текущей ячейки во все соседние, доступные(даже если это шаг "назад"). Учитывая специфику задачи, для избежания зацикливания, запоминайте пройденный путь, и на клетки из него не идите. в глобальной области видимости держите массив, куда будете записывать самый короткий путь, и переменную, для его длины. по достижении цели, перезаписывайте их, если новый путь короче. По окончании рекурсивной функции, у вас на руках будет путь, и его длина.Этот путь и будет одним из кратчайших(может быть несколько одинаковых по длине кратчайших) Если вы не в состоянии оформить эту мысль в код JS, то идите и учите теорию JS.При необходимости и алгоритмизацию. Готового решения от скуки, за просто так вам тут не разместят. Удачного кодинга! |
Ключевые слова: волновой алгоритм.
|
Волновой алгоритм ищет только минимальное количество вершин от точки А до точки Б. Мне же необходимо кратчайшее растояние. Сеть уже обшарил и нашел решения на С++, Delphi и Паскале, но они находят не кратчайший путь а просто путь от точки к точке при этом путь является не только не кратчайшим, но и не минимальным по количеству ребер.
И если у вас нет кода то подскажите просто как это можно оформить без цикла, просто карта обьемная и через циклы скрипт прогружается очень долго! |
Количество вершин -- частный случай расстояния, если вес каждого ребра равен 1. Что мешает на каждом шаге прибавлять не единицу, а вес ребра?
|
Цитата:
|
Часовой пояс GMT +3, время: 16:50. |