数据结构上机思考

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

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();
}

 

posted on 2018-11-12 18:28  larvie  阅读(126)  评论(0编辑  收藏  举报

导航