CCCPaste

Untitled

#include 
#include 
#include 

class Maze {
private:
    int rows, columns;
    std::vector > mat;
    
public:
    Maze(int _rows = 2, int _columns = 2) {
        rows = _rows;
        columns = _columns;
        mat.resize(rows);
        for(int i = 0; i < rows; i++) {
            mat.at(i).resize(columns);
        }
        for(int i = 0; i < rows; i++) {
            for(int j = 0; j < columns; j++) {
                mat.at(i).at(j) = '#';
            }
        }
    }
    int get_rows() const {
        return rows;
    }
    int get_columns() const {
        return columns;
    }
    void set_value(int i, int j, char new_value) {
        mat.at(i).at(j) = new_value;
    }
    void print() {
        for(int i = 0; i < rows; i++) {
            for(int j = 0; j < columns; j++) {
                std::cout << mat.at(i).at(j) ;
            }
            std::cout << std::endl;
        }
    }
    char get_position(int i, int j) {
        return mat.at(i).at(j);
    }
};
class RandomMaze {
private:
    Maze maze;
    std::vector > visited;
    std::vector di{-1, 1, 0, 0};
    std::vector dj{0, 0, -1, 1};
public:
    RandomMaze(Maze _maze) {
        maze = _maze;
        visited.resize(maze.get_rows());
        for(int j = 0; j < maze.get_rows(); j++) {
            visited.at(j).resize(maze.get_columns(), false);
        }
    }
    void generate_random_maze(int ii, int jj) {
        visited[ii][jj] = true;
        std::vector > v;
        for(int i = 0; i < 4; i++) {
            int ti = di.at(i) + ii;
            int tj = dj.at(i) + jj;
            if(ti >= 0 and ti < maze.get_rows() and tj >= 0 and tj < maze.get_columns() and !visited.at(ti).at(tj)) {
                v.push_back(std::make_pair(ti, tj));
            }
        }
        std::random_shuffle(v.begin(), v.end());
        for(std::pair p : v) {
            maze.set_value(p.first, p.second, '.');
            generate_random_maze(p.first, p.second);
        }
        visited[ii][jj] = false;
        
    }
    Maze get_maze() {
        return maze;
    }
    
};
int main(int argc, char *argv[])
{
    int seed = -1;
    int n, m;
    if(argc > 2) {
        n = atoi(argv[1]);
        m = atoi(argv[2]);
    }
        if(argc == 3) {
        seed = atoi(argv[3]);
    }
    if(seed == -1) {
        srand(time(0));
    }
    else {
        srand(seed);
    }
    n = 5;
    m = 5;
    Maze maze(n, m);
    RandomMaze random_maze(maze);
    random_maze.generate_random_maze(0, 0);
    random_maze.get_maze().print();
    
    
    return 0;
}