2016-09-05 5 views
2

Я пытаюсь написать программу, чтобы найти кратчайший путь в 3D-лабиринте с использованием рекурсии.Самый короткий путь в 3D-лабиринте

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

Обратите внимание, что я хочу сохранить рекурсивный подход.

Может кто-нибудь предложить решение?

Вот пример 2D лабиринт:

s  
XXXX 
XX X 
XXX 
Xe X 

Один начинается с s собирается e. X является препятствием, и является маршрутом.

+0

Какова структура данных для хранения узлов? –

+0

Лабиринт - это 3D-сетка. Я использую 3D-таблицу, и каждый узел определяется его декартовыми координатами (x, y, z). –

+0

Почему вы хотите найти рекурсивное решение? Это не всегда быстрее. Попробуйте прочитать о 'A * Algorithm'. –

ответ

0

Это зависит от алгоритма, который вы реализуете. Если вам нужен рекурсивный подход, то поиск случайного пути - хорошая начальная точка (хотя, если проблема слишком сложная, плохой выбор может иметь огромное влияние на количество попыток, необходимых для конвергенции). Затем вам нужно изменить путь и, например, проверить, является ли новый путь короче, чем предыдущий; если да, то вы продолжаете изменять свои параметры в одном направлении. В противном случае вы должны изменить свое направление. Критерий выхода для алгоритма/программы обычно является разницей между найденным решением и идеальным решением. Поэтому, если вы знаете длину идеального пути (оптимальное решение, вам не нужно знать сам путь, а только его длину), то вы можете определить допустимое поле ошибки 10^-9, например, и различие между обоими решениями меньше этого поля, ваш алгоритм выходит.

В заключение этот вопрос является проблемой математической оптимизации. Оптимизация - это область, которая имеет хорошо известную литературу, хотя она немного сложна. Однако, если бы я был вами, я бы искал алгоритмы кратчайшего пути и реализовал тот, который лучше всего подходит для моего приложения (3D Maze)

+0

Я пробовал алгоритм Дейкстры, прежде чем пытаться рекурсивно, но он слишком медленный.Например, для решения только 2D 30x30 лабиринта требуется 7 секунд. И поэтому я хотел перейти к рекурсивности. –

+0

Кроме того, я действительно не знаю длины идеального решения, я хочу его найти, и мне нужна точная длина, а не просто приближение, поэтому поля ошибки не должны рассматриваться Вот. –

Смежные вопросы