Генерация случайного «лабиринта» — переполнение стека 3d-массивов

поэтому я работаю над школьным заданием, так как я изучаю C ++. Я не столько ищу код, который мне дается, сколько помогает понять / придумать правильный алгоритм для этой проблемы.

Мне нужно создать (5x5x5) 3d лабиринт из 1 и 0. Заполните его случайным образом (кроме 0,0,0 — 1 для начала и 4,4,4 — 1 для финиша).

Вот что я сделал.
Я сделал объект куба:

#include "cube.h"Cube :: Cube(int cube_value)
{
cube_value = 0;
chk_up = false;
chk_down = false;
chk_left = false;
chk_right = false;
chk_front = false;
chk_back = false;
}
Cube :: ~Cube(void){}

в моем классе управления лабиринтом я инициализировать, как это

PathFinder::PathFinder()
{
// initializing / sizing 5x5x5 Maze
Maze.resize(5);
for(int y = 0; y < 5 ; ++y)
{
Maze[y].resize(5);
for(int z = 0; z<5 ; ++z)
{
Maze[y][z].resize(5);
}
}

int at_x = 0;
int at_y = 0;
int at_z = 0;
}

Заголовок для этого класса:
#include «PathfinderInterface.h» #include «cube.h»

class PathFinder : public PathfinderInterface {
private:
int at_x;
int at_y;
int at_z;
public:
vector<vector<vector<Cube> > > Maze;

PathFinder();
virtual ~PathFinder();

string getMaze();

void createRandomMaze();

bool importMaze(string file_name);

vector<string> solveMaze();
};

Итак, я пытаюсь заполнить его, и это то, что у меня есть, это может не иметь смысла:

void PathFinder :: fillmaze()
{
Maze[0][0][0].cube_value = 1;
Maze[4][4][4].cube_value = 1;
int atx = 0 , aty = 0 , atz = 0;
while(atx<5 && aty < 5 && atz < 5)
{

if(atz == 5)
{
aty = aty + 1;
}
if(aty == 5)
{
atx = atx + 1;
atx = 0;
}

for(atz=0 ; atz<5 ; ++atz)
{
if((atx!= 0 && aty!=0 && atz!=0) || (atx!=4 && aty!=4 && atz!= 4) )
{
Maze[atx][aty][atz].cube_value = (rand() % 2);
}
}
}
}

Я пытаюсь заполнить всю ось z и провести трассировку вправо по оси x, затем переместиться на одну точку вверх и сделать то же самое, это хороший подход или есть лучший способ сделать это? Я просто запутался.

1

Решение

void PathFinder :: fillmaze()
{
int atx = 0 , aty = 0 , atz = 0;
while(atz<=4)
{
if(atx == 5)
{
aty = aty + 1;
}
if(aty == 5)
{
aty = 0;
atz = atz + 1;
}
if(atz < 5)
{

for(atx=0 ; atx<5 ; ++atx)
{
Maze[atx][aty][atz].cube_value = (rand() % 2);
}

}
}
Maze[0][0][0].cube_value = 1;
Maze[4][4][4].cube_value = 1;

}

Это сработало! Теперь о прохождении лабиринта! : /

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]