我使用此函数生成数字0,1,2,3的随机排列,这些数字被转换为由代理在游戏Tron的二维网格中移动。
srand(time(nullptr));
vector<int> permutationMoves = { 0, 1, 2, 3 };
auto currentIndexCounter = permutationMoves.size();
for (auto iter = permutationMoves.rbegin(); iter != permutationMoves.rend();
iter++, --currentIndexCounter) {
int randomIndex = rand() % currentIndexCounter;
if (*iter != permutationMoves.at(randomIndex)) {
swap(permutationMoves.at(randomIndex), *iter);
}
}
但是,我有两个问题:
所有帮助将受到高度赞赏,谢谢!
答案 0 :(得分:5)
问题在于:
srand(time(nullptr));
您每次都要重置种子。如果两次通话之间的时间很短,则会产生相同的随机数。
删除该行并将其放在程序的开头。
答案 1 :(得分:3)
rand()
和srand
是伪随机数生成器,因此您可以使用C ++ 11方式生成随机数。
std::random_device randomDevice;
std::mt19937 generator(randomDevice());
std::uniform_int_distribution<> distribution(1, 100);
int randNum = distribution(generator);
确保#include <random>