1
所以我正在學校分配,因爲我正在學習C++。我沒有那麼多尋找代碼給我,作爲幫助理解/提出正確的算法來解決這個問題。生成一個隨機的「迷宮」-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,然後向上移動一個y並且做同樣的事情,這是一個好方法,還是有更好的方法來做到這一點?我只是很困惑。
是否有一個原因,它必須走在一個點,並走出另一個? – EvilTeach
您是否閱讀過http://en.wikipedia.org/wiki/Maze_generation_algorithm? – n0rd
EvilT - 假設迷宮將從一端開始,另一端開始,因此在這些點上需要有一個有效的路徑號碼。 n0rd - 我還沒有看到,謝謝參考,我會研究這一點。 –