我有一个2d坐标数组,我想以随机顺序迭代它们。我正在使用srand
因此坐标将始终使用相同的密码随机化。这是一种安全形式
如何使用rand()
加扰2d数组?
答案 0 :(得分:1)
一种简单/简单的方法是创建一个从0
到n - 1
的整数数组,其中n
是第一个数组的长度。
随机播放此数组,然后使用其中的值作为原始数组上的迭代索引。
C中没有标准的shuffle方法,所以请使用:
#include <stdlib.h>
/* Arrange the N elements of ARRAY in random order.
Only effective if N is much smaller than RAND_MAX;
if this may not be the case, use a better random
number generator. */
void shuffle(int *array, size_t n)
{
if (n > 1)
{
size_t i;
for (i = 0; i < n - 1; i++)
{
size_t j = i + rand() / (RAND_MAX / (n - i) + 1);
int t = array[j];
array[j] = array[i];
array[i] = t;
}
}
}