1. открой поисковик
2. вбей данные из "как сгенерировать идеальный бесконечный лабиринт в с++"
3.посмотри видео и всё поймёшь
желаю удачи!!
Объяснение:
Предисловие
На написание статьи меня сподвигло практически полное отсутствие материалов на русском языке про алгоритмы генерации лабиринтов. На Хабре, из того, что вообще есть по теме, можно отметить две статьи: раз и два. Ценность и пользу из которых несет лишь вторая. В первой – просто перевод формального алгоритма и небольшое его пояснение. Что, конечно, неплохо, но очень скудно и не вызывает желания изучать тему дальше.
Если моя статья Вам понравится, я продолжу писать о различных алгоритмах. Мы рассмотрим два самых примитивных и простых случая – генерация двоичного дерева и Сайдвиндер, который, по своей сути, просто чуть измененная версия двоичного дерева с одним заметным плюсом. ОСТОРОЖНО ТРАФИК.
Дам один совет – не подглядывайте в код до тех пор, пока вы не напишите свою реализацию. Вы получите гораздо больше удовольствия и пользы от исправления багов и поиска ошибок, чем если просто переведете с одного языка на другой.
Серьезно. Прислушайтесь к совету. Вы, верно, потратите больше времени, но оно стоит стоит. У меня, например, из-за пары ошибок появился очень забавный генератор «инопланетных» текстов, который можно использовать в различных Sci-Fi играх для создания текста. Надеюсь, Вы изучаете тему для себя и никуда не спешите.
P.S.:
Я буду использовать термин «смещение», предполагая английский bias. Т.е. пристрастие алгоритма к направленности в какую-либо сторону. Например, правое смещение – алгоритм генерирует лабиринты с длинными правыми проходами.
Раскраска лабиринтов происходит относительно расстояния от крайнего левого угла поля до некоторой клетки. Чем дальше от начальной координаты – тем темнее будет цвет.
Идеальный лабиринт – такой лабиринт, в котором одна клетка связана с другой одним единственным путем. Иначе говоря, остовное дерево.
Про Lua
Алгоритм двоичного дерева
При первом проходе программы
m=0
в цикле for сравниваем Если элемент массива под номером 1 (т.е. число 2) минус 2*m>1 то m равна текущему элементу массива.
т.к. 2-2*0=2 и это больше 0 то значение m становится равным 2
1 проход m=2
При втором проходе цикла фор сравниваем уже второй элемент массива, т.е.
Dat[2]-2*m>1
6-2*2>1
2>1
Условие выполняется значит значение m на 2 проходе равно 6
при дальнейших проходах цикла for мы больше не получим значений больше 1 т.к. текущее m=6, т.е. из элементов массива мы будем вычитать 12, т.е. ни одного положительного числа мы не получим, т.е. условие if не выполнится ни разу и значение m не изменится
ответ m=6