еще 3 алгоритма генерации лабиринтов

вот этот мне кажется достаточно абсурдным и перспективным


Автор: gunnerq@rambler.ru

Время: 11-05-05 06:55





По-моему можно проще:
1) берем чистую матрицу
2) ставим блоки по
периметру
3) обозначаем случайно вход и выход
4) кидаем случайно блок в
пустое место
6) если от входа до выхода можно дайти блок не убираем
5)
если кинули блоков больше, чем нам нужно (процент заполненности - например
40) выход
7) goto 4




//1
int mas[N][M];
memset(mas,0,M*N*sizeof(int));
//2
for(int i = 0;
i < N; i++)mas[i][0]=1;
for(int i = 0; i < N; i++)mas[i][M-1]=1;

for(int i = 0; i < M; i++)mas[0][i]=1;
for(int i = 0; i < M;
i++)mas[N-1][i]=1;


//3
int exit = random(M);
int enter = random(M);
mas[0][exit] = 0;

mas[N-1][enter] = 0;


//4
double percent = 0.4;
int zapolneno = N*2+(M-2)*2;
while(1)
{
x
= random(N-2);
y = random(M-2);
mas[x][y] = 1;
mas[x][y] =
СanPass(mas,0,exit,N-1,enter,N,M);
zapolneno +=max[x][y];
//5

if(zaploneno/(N*M) > percent)break;
}




bool CanPass(int mas[][],x1,y1,x2,y2,N,M)
{
//Волновой допустим
алгоритм проверки возможности пройти от (x1,y1) до (x2,y2)
}