首页 > 解决方案 > 用细胞表示迷宫

问题描述

我试图表示 Maze 对象,它是一个矩形单元格网格,即 Cell 对象的二维数组。但我很困惑为什么我不能这样设置

 m[1][1].setDown(false); 

我会收到错误“arr 是私人成员”,但我在这里对单元格对象使用 settermmethod,所以它不应该工作吗?还有另一种更好的方法来表示迷宫内的 Cell 对象吗?

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include<fstream>
#include<string>
#include <stack>
using namespace std;

class cell
{
private:
    bool visited;
    bool up, down, right, left;
    int x, y;
    int px, py;
    char status;
public:
    cell() {
        up = down = right = left = 0;
        x = y = 0;
        status = ' ';
    }
    bool getUp() { return up; }
    bool getDown() { return down; }
    bool getRight() { return right;  }
    bool getLeft() { return left; }
    bool getvisited() { return visited; }
    void setUp(bool b) { up = b; }
    void setDown(bool b) { down = b; }
    void setRight(bool b) { right = b; }
    void setLeft(bool b) { left = b; }

    void setvisited(bool b=0) { visited = b; }
    void setstatus(char s = ' ') { status = s; }
    char getStatus() { return status; }

};

class Maze
{
private:
    int row, col;
    cell **arr;
public:

    Maze(int r = 0, int c = 0)
    {
        this->row = r; this->col = c;
        arr = new cell*[row];
        for (int i = 0; i < row; i++)
            arr[i] = new cell[col];
    }


};

int main()
{

    Maze m(5, 5);

    m.arr[1][1].setLeft(true);
}

标签: c++

解决方案


一种解决方案是通过以下方式更改您的 Maze 公共声明来表示您的迷宫对象的更好方法:

public: 
Cell GetCell(int r,int c) {
     return arr[r][c];
}

然后在您的主要方法中将错误行更改为:

m.GetCell(1,1).setLeft(true);

推荐阅读