随机数发生器(rand)不是随机的吗?

时间:2012-04-15 00:50:56

标签: c++ random

我正在生成迷宫,我只能选择第一列或最后一列。我只能选择偶数行(如果你在1处开始行索引)。我有正确的逻辑,除了迷宫开始位置不是随机的。如果我生成50个迷宫,那些都是20x20,所有起始位置都是相同的。任何帮助将不胜感激。感谢。

void Maze::generatePath()
{
    int startingColumn = -1;
    int startingRow = -1;

    srand (time(NULL));

    int side = rand() % 2;
    startingColumn = (width - 1) * side; // will get first or last column

    int row = rand() % height; // 0 -> height - 1

    if(row % 2 == 0) // even, add one, or subtract if last row
    {
        if(row + 1 >= width)
            startingRow = row - 1;
        else
            startingRow = row + 1;
    }
    else
    {
        startingRow = row; // odd, keep it
    }

    grid[startingRow][startingColumn] = ' '; // starting character is blank
}

每当我生成一个新的迷宫时,我都会调用此方法。这段代码是为了获得起始位置。我还没写完其余的文章。

2 个答案:

答案 0 :(得分:7)

程序启动时只调用srand一次。通过在同一秒内反复调用它,可以将随机数生成器重置为相同的状态。

答案 1 :(得分:2)

如果你需要更好的随机性,你可以使用比时间更好的随机种子(NULL)。 它可以是例如unix类系统上的/ dev / random(或更实际/ dev / urandom)设备。 对于真正的硬核情况,可能需要一些基于物理现象的真实无线电。 例如这一个:http://photonics.anu.edu.au/qoptics/Research/qrng.php