
- •Разработка программного модуля реализация волнового алгоритма для поиска пути в лабиренте
- •Http://ru.Wikipedia.Org/wiki/%d0%92%d0%be%d0%bb%d0%bd%d0%be%d0%b2%d0%be%d0%b9_%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc - Волновой алгоритм
- •Волновой алгоритм. Нахождение пути в лабиринте
- •Как работает волновой алгоритм?
- •Алгоритм поиска пути в лабиринте - волновой алгоритм
- •Волновой алгоритм
- •Суть алгоритма
- •Разновидности
- •Практическое применение
- •2.1. Волновой алгоритм (Алгоритм Ли)
- •2.2. Маршрутный алгоритм
- •2.2.1. Маршрутный алгоритм основанный на вычислении расстояния между точками.
- •2.2.2. Маршрутный алгоритм основанный на рекуррентном соотношении.
- •3. Алгоритм нахождения пути на карте
- •Маршрутный алгоритм
- •Маршрутный алгоритм, основанный на вычислении расстояния между точками
- •Маршрутный алгоритм, основанный на рекуррентном соотношении
Алгоритм поиска пути в лабиринте - волновой алгоритм
В процессе разработки игры на j2me(для мобильного телефона), столкнулся с проблемой поиска пути лабиринте. Поискал по форумам, нашел довольно интересный алгоритм, о котором сейчас и пойдет речь. Это так называемый «волновой алгоритм», он в общих чертах описан на но из написанного там не очень понятно, как применить его на практике. Так, что я решил написать о нем с более практической точки зрения. Итак, приступим. Идея такая: в стороны от исходной точки (где находимся мы) испускается волна. Изначально ее значение - ноль. На следующем шаге, все ближайшие точки, в которые мы можем переместиться (в двухмерном лабиринте: вперед, назад, влево и вправо) и в которых еще нет волны, получают значение равное текущему значению волны + некоторый модификатор проходимости этой точки. Этот модификатор может свидетельствовать о различных препятствиях на пути: изменение ландшафта(как в Героях, по болоту и горам идти дольше, чем по дороге), анизотропность пространства(разные направления – различны по проходимости, например при движении вверх нам препятствует сила тяготения, а вниз наоборот помогает). Чем больше модификатор проходимости - тем дольше его преодолевать. В таком случаи клеткам куда пойти нельзя(различные препятствия) можно установить значение равное бесконечности(на практике, это может быть некоторое значение, которое не может достигаться в процессе алгоритма, например отрицательные, данные значение в последствии не учитываются). Затем из каждой из вышеперечисленных точек снова выпускается волна, Последовательно обрабатываются точки с наименьшим значением волны, до того момента пока не будет достигнута конечная точка. На точках с плохой проходимостью волна будет задерживаться.
Для большей наглядности я написал реализацию этого алгоритма на Java(generic'и не используются поскольку в j2me они отсутствуют).
Волновой алгоритм
Волновой алгоритм
-
Волново́й алгори́тм — алгоритм, позволяющий найти минимальный путь в графе с рёбрами единичной длины. Основан на алгоритме поиска в ширину. Применяется для нахождения кратчайшего пути в графе, в общем случае находит лишь его длину.Содержание
1 Суть алгоритма
2 Разновидности
3 Практическое применение
Суть алгоритма
На двумерной клетчатой карте (матрице), состоящей из «проходимых» и «непроходимых» клеток, обозначена клетка старта и клетка финиша. Цель алгоритма — проложить кратчайший путь от клетки старта к клетке финиша, если это, конечно, возможно. От старта во все направления распространяется волна, причем каждая пройденная волной клетка помечается как «пройденная». Волна, в свою очередь, не может проходить через клетки, помеченные как «пройденные» или «непроходимые». Волна движется, пока не достигнет точки финиша или пока не останется непройденных клеток. Если волна прошла все доступные клетки, но так и не достигла клетки финиша, значит, путь от старта до финиша проложить невозможно. После достижения волной финиша, от финиша прокладывается путь до старта и сохраняется в массиве.