2013-11-04 300 views
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並且做同樣的事情,這是一個好方法,還是有更好的方法來做到這一點?我只是很困惑。

+0

是否有一個原因,它必須走在一個點,並走出另一個? – EvilTeach

+2

您是否閱讀過http://en.wikipedia.org/wiki/Maze_generation_algorithm? – n0rd

+0

EvilT - 假設迷宮將從一端開始,另一端開始,因此在這些點上需要有一個有效的路徑號碼。 n0rd - 我還沒有看到,謝謝參考,我會研究這一點。 –

回答

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; 

} 

這工作!現在到迷宮遍歷! :/