我想写C约翰康威的生命游戏,但我在添加活细胞到板上时遇到了麻烦。我写的处理它的功能非常慢。思考过程:我想随机添加n个活细胞到板子上,所以当细胞离开设置活着时,得到一个随机的(x,y)对,如果它已经死了,就让它活着。这样我可以保证n个细胞活着。我可以加快这个功能吗?
我对这个问题的理解不正确,还是我只是低效?为什么这么慢,我怎样才能让它更快?
void add_cells(int board[BOARD_WIDTH][BOARD_HEIGHT], int n)
{
// Randomly set n dead cells to live state.
while (n)
{
int randX = rand() % BOARD_WIDTH;
int randY = rand() % BOARD_HEIGHT;
if(board[randX][randY] == 0)
{
board[randX][randY] = 1;
n--;
}
}
}
这是O(n),应该在负担得起的时间内完成。 n有多大? –
另请参阅https://stackoverflow.com/questions/40485/optimizing-conways-game-of-life –
如果让我们说70%的细胞还活着,那么这意味着您的代码将不得不寻找其他细胞7次10个,这使得不必要的重复。如果您将单元格从“剩余单元格”数组中取出时将其设置为活动状态,会发生什么情况? –