我有一个函数,我使用srand(time(null))并且它工作正常,在每次迭代时生成不同的数字。然后,我在我的函数中添加了一段时间,现在它在循环的每次迭代期间生成相同的两个数字。这是我的代码:
void readgraph()
{
int i,vi=0,vj=0;
for(i=0; i<nrVertices; i++)
G[i]=NULL;
for(i=0; i<nrVertices; i++)
{
srand(time(NULL));
while(checkInsert(vi,vj)==false) //this is the while that I added
{
vi=rand()%nrVertices;
vj=rand()%nrVertices;
while(vj==vi)
{
vj=rand()%nrVertices;
}
}
printf("%d %d\n",vi,vj);
insert(vi,vj);
insert(vj,vi);
}
}
我怎么能解决这个问题呢?谢谢。
@milleniumbug我的“短编译代码”:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
#define MAX 10000
#include <sys/time.h>
typedef struct node
{
struct node *next;
int vertex;
} node;
int a[10000][10000];
int nrVertices=100;
int nrEdges=1000;
node *G[10000]; //heads of the linked list
void readgraph()
{
int i,vi=0,vj=0;
for(i=0; i<nrVertices; i++)
G[i]=NULL;
for(i=0; i<nrEdges; i++)
{
while(checkInsert(vi,vj)==false)
{
vi=(rand()+i-2)%nrVertices;
vj=(rand()+i+7)%nrVertices;
while(vj==vi)
{
vj=rand()%nrVertices;
}
}
printf("%d %d\n",vi,vj);
//insert(vi,vj);
//insert(vj,vi);
}
}
int main()
{
srand(time(NULL));
readgraph();
return 0;
}
答案 0 :(得分:0)
你应该运行srand
一次 - 否则你每次都只是重新初始化状态,这使你使用time(NULL)
,生成的数字只会在下一秒再次发生变化,是完全可以预测的。