数据结构上机思考
抱歉,迟到了,第五次才开始写
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();
}