1. открой поисковик
2. вбей данные из "как сгенерировать идеальный бесконечный лабиринт в с++"
3.посмотри видео и всё поймёшь
желаю удачи!!
Объяснение:
Предисловие
На написание статьи меня сподвигло практически полное отсутствие материалов на русском языке про алгоритмы генерации лабиринтов. На Хабре, из того, что вообще есть по теме, можно отметить две статьи: раз и два. Ценность и пользу из которых несет лишь вторая. В первой – просто перевод формального алгоритма и небольшое его пояснение. Что, конечно, неплохо, но очень скудно и не вызывает желания изучать тему дальше.
Если моя статья Вам понравится, я продолжу писать о различных алгоритмах. Мы рассмотрим два самых примитивных и простых случая – генерация двоичного дерева и Сайдвиндер, который, по своей сути, просто чуть измененная версия двоичного дерева с одним заметным плюсом. ОСТОРОЖНО ТРАФИК.
Дам один совет – не подглядывайте в код до тех пор, пока вы не напишите свою реализацию. Вы получите гораздо больше удовольствия и пользы от исправления багов и поиска ошибок, чем если просто переведете с одного языка на другой.
Серьезно. Прислушайтесь к совету. Вы, верно, потратите больше времени, но оно стоит стоит. У меня, например, из-за пары ошибок появился очень забавный генератор «инопланетных» текстов, который можно использовать в различных Sci-Fi играх для создания текста. Надеюсь, Вы изучаете тему для себя и никуда не спешите.
P.S.:
Я буду использовать термин «смещение», предполагая английский bias. Т.е. пристрастие алгоритма к направленности в какую-либо сторону. Например, правое смещение – алгоритм генерирует лабиринты с длинными правыми проходами.
Раскраска лабиринтов происходит относительно расстояния от крайнего левого угла поля до некоторой клетки. Чем дальше от начальной координаты – тем темнее будет цвет.
Идеальный лабиринт – такой лабиринт, в котором одна клетка связана с другой одним единственным путем. Иначе говоря, остовное дерево.
Про Lua
Алгоритм двоичного дерева
Первая
Program n1;
Uses CRT;
Var a,b,c,k: integer;
begin
Writeln('Vvedite a,b,c');
Readln(a,b,c);
If (a=b)and(b=c) then begin k:=1; writeln('Ravnostoronnij') end else
If (a=b)or(b=c)or(a=c) then begin k:=1; writeln('Ravnobedrennij'); end;
If (sqr(a)=sqr(b)+sqr(c))or(sqr(b)=sqr(a)+sqr(c))or(sqr(c)=sqr(b)+sqr(a))
then begin k:=1; writeln('Pryamoygolnij'); end;
If (a>b+c)or(b>a+c)or(c>a+b) then begin k:=1; writeln('treygolnik nelza sostavit'); end;
If k=0 then writeln('Treygolnik Raznostoronnij');
readln
end.
Вторая
Program n1;
Uses CRT;
Var a,b,c: integer;
begin
ClrScr;
Writeln('Vvedite a,b,c');
Readln(a,b,c);
If (a>0)and(b>0)and(c>0) then writeln('Summa kvadratov=',sqr(a)+sqr(b)+sqr(b));
If (a mod 2=0)or(b mod 2=0)or(c mod 2=0) then writeln('Summa =',a+b+c,', Proizvedenie =',a*b*c);
readln
end.