数据结构上机思考

抱歉,迟到了,第五次才开始写

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++)
     {
         for  ( int  j=0;j<N;j++)
         {
             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++)
         {
             for  ( int  j=0;j<N;j++)
             {
                 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];
         for  ( int  j=0;j<N;j++)
         {
             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();
}

 

转载于:https://www.cnblogs.com/larvie/p/9948203.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值