LINUX.ORG.RU

поиск кратчайшего пути по лабиринту


0

1

доброе

есть лабиринт, в виде двумерного массива. необходимо найти кратчайший путь из точки А в точку Б с учетом, что вариантов движения из клетки — 8 (вверх, вниз, вправо, влево, + диагонали).

задача древняя как сам мир :) способов решения, думаю полно.

пока нагуглил и играюсь с волновым алгоритмом, но как-то не могу его подружить с диагоналями. вроде все хорошо, путь находит, но там где надо идти прямо — виляет :)

может кто-то пробовал другие алгоритмы? если да то какие (желательно с ссылкой)? есть ли уже готовые реализации скажем на с\с++?

  • Насчёт диагоналей - поставь вес 1.5.
  • Волновой медленный. Попробуй A*, т.к. почти тоже самое только направленный.
adzeitor
()
Ответ на: комментарий от backbone

Этот алгоритм точно такой же как и A*, только без эвристики (H всегда равна 0). Так как в нем нет эвристики, он ищет путь одновременно во все стороны. Перед тем, как найти путь, алгоритм исследует намного больше территории. Это делает его медленнее A*.

Нашел реализацию А* работает, полет нормальный :)

Evil_Wizard ★★★
() автор топика

если кому интересно:

wargus: src/pathfinder/astar.cpp

Evil_Wizard ★★★
() автор топика

Реализуй волновой алгоритм не на клетчатом поле, а на графе. Тогда ему будет вообще всё равно, сколько у узла будет доступных направлений - хоть 4, хоть 8 хоть 100500.

blexey ★★★★★
()

шириной - тогда первое же достижение выхода даёт кратчайший путь.

qulinxao ★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.