数据结构上机思考
抱歉,迟到了,第五次才开始写
5
随机种子的应用
srand(time(0));
rand()%a+b;.....随机数属于[b,a];
https://blog.csdn.net/cmm0401/article/details/54599083
其中,随机生成一张图的过程中实际上需要随机生成的是:
图的总节点数
这个点与另外哪些点相连接(此点的度)
这条边的权值
#define MAX_DISTANCE 100000
bool** G;//图,G[i][j]=true表示顶点i和j相邻int N;//图的顶点个数int **D;//D[i][j]表示点i和点j的距离void floyd(){ //initialize for (int i=0;i<N;i++) { { if (G[i][j])//i和j连通,则他们的距离是1 { D[i][j]=rand()%50+10;
D[j][i]=D[i][j]; }else{//否则不可达 D[i][j]=MAX_DISTANCE; } } } //floyd for (int k=0;k<N;k++) { for (int i=0;i<N;i++) { { if (D[i][j]>D[i][k]+D[k][j]) { D[i][j]=D[i][k]+D[k][j]; } } } }}int main(){ srand((unsigned int)time(NULL)); N=rand()%10+5; G=new bool *[N]; D=new int *[N]; for (int i=0;i<N;i++) { G[i]=new bool[N]; D[i]=new int[N]; { G[i][j]=0; D[i][j]=0; } }for (int i=0;i<N;i++) { int n=rand()%N;//顶点i最多和n个顶点连通 for (int k=0;k<n;k++) { int j=rand()%N; G[i][j]=true; G[j][i]=true; } } floyd();}
浙公网安备 33010602011771号