填充二维向量C ++

时间:2016-04-24 20:02:57

标签: c++

我正在为学校制作一个创造扫雷游戏的项目。

#include <iostream>
#include <cstdlib>
#include <vector>
using namespace std;
int mines;
int rows;
int columns;
vector<vector<int> > mineField; 

int main() {

    cout << "Input number of rows: ";
    cin >> rows;
    cout << "Input number of columns: ";
    cin >> columns;
    cout << "Input number of mines: ";
    cin >> mines;

    int mine = 0;
    int num_of_mines = 0;

    vector<int> temp; 

    while(num_of_mines < mines){

        mine = rand()%(rows * mines);

        if(mineField[mine][mine] != 1){

            temp.push_back(1);
            mineField.push_back(temp);
            num_of_mines++;

        }
    }

 return 0;   
}

我在这里尝试做的是使用二维向量填充雷区,然后尝试输出它以查看地雷是否随机分配。 (1 =矿);但这一直给我一个错误。 非常感谢你的帮助!

2 个答案:

答案 0 :(得分:0)

你的if语句会因为我的计算方式来管理不存在的东西(你不需要在行和列的大小之后查看矩阵的大小)

(你没有正确地启动雷区而不使用列)

答案 1 :(得分:0)

正如其他人所说,您的问题是您没有正确分配mineField矩阵。最容易添加

for (int i = 0; i < rows; ++i) {
    mineField.push_back(vector<int>(columns, 0)); // init everything to zeroes
}

现在你可以用矿井填充矿场。关于生成地雷的一些指示:目前你只是随机化一个坐标,但你应该随机化两个。另外,我不完全确定为什么你需要乘以mines。我会做类似的事情:

while (num_of_mines < mines) {
    minex = rand() % columns;
    miney = rand() % rows;
    if (mineField[minex][miney] != 1)
        ...