随机函数似乎不能很好地工作

时间:2014-04-05 21:02:45

标签: c++ algorithm random maze

好的我正在创建一个生成迷宫的程序。但是它很慢。然而,经过调查,似乎是因为我使用的随机函数运行良好。

以下是我的主要功能

中的循环
while(maze.size() != 1){

    cell = rand()%(nrows*ncols);
    direction = maze.randdir(cell);
    cout << "Cell: " << cell << " Merged With: " <<maze.dir(cell,direction)<<endl;
    maze.merge(cell, maze.dir(cell, direction));

}

如图所示随机挑选细胞,并且rand最初用srand(时间(NULL))播种;然后选择一个方向使用类似的方法,但它会在返回之前检查以确保其有效方向。这是下面的内容。

int dset::randdir(int i){

    srand(time(NULL));
    int direction;
//cout << "i : " << i << endl;
    while (true){
        direction = rand() % 4;

        if(direction ==0){
            if( i != 0){
                if(i%(ncols) != 0){
                    break;
                }
            }
        }
        if(direction == 1){
            if(i-ncols > 0){
                break;
            }
        }
        if (direction == 2){
            if ( i == 0 )
                break;
            if (i%ncols != ncols-1){
                break;
            }
        }

        if (direction == 3){
            if (i+ncols < ((nrows*ncols))){
                break;
            }
        }

    }
    return direction;
}

我认为它们中的任何一个都没有任何错误,但是当我运行程序时,我在while循环中输出的out语句显示它在一个次数(方式太多无法计数)之前尝试了相同的单元格和相同的方向尝试新的。这使我的程序痛苦地缓慢。

0 个答案:

没有答案