• 大小: 20KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: C/C++
  • 标签:

资源简介

网络N=10000个节点,幂率指数为3,节点度的范围为3到N开方。

资源截图

代码片段和文件信息

// UCM-随机网络.c (邻接表文件): 定义控制台应用程序的入口点。

#include 
#include 
#include “time.h“
#include 
#include 

#define NetMaxSize 10000//定义最大网络数
#define r 3 //定义幂率分布的指数
//节点度的大小为3到最大节点数开根号
//边表节点
typedef struct EdgeNode
{
    int adjvex;//储存对应顶点的下标(邻接点编号)
    struct EdgeNode * next;//指向下一个边表节点
} EdgeNode;

//顶点表节点
typedef struct VertexNode
{
    int verNum;//顶点编号
    int node_K;//节点的度数
    int node_rand;//随机连接后每个节点的度
    struct EdgeNode * firstarc;//指向边表节点
} VertexNode;
//图节点
typedef struct Graph
{
    VertexNode agjList[NetMaxSize];//顶点表数组
    //int numVextexesnumEdges;//当前顶点数和边数
} Graph;
//创建图的邻接表结构
void GreateGraph(Graph * G)
{
    int k_Max=(int)sqrt(NetMaxSize);//设置网络中节点可能度的最大值
    int total_k=0;//记录节点总的度数
    double p_k[k_Max]p_kr[k_Max];//p_k[k_Max]计算存储符合幂率分布的度分布值;p_kr[k_Max]用来存真正给节点赋半桩的值
    // p_k[0]=0;p_k[1]=0;
    // p_kr[0]=0;p_kr[1]=0;
    double count=0;//统计度分布之和,之后计算度分布公式的指数
    for (int k=3; k<=k_Max; k++) //计算出每个度下对应的度分布
    {
        p_k[k]=(double)1/pow(kr);
        count+=p_k[k];
    }
    double count_1=0.0;
    double m=1/count;
    for (int k=3; k<=k_Max; k++)
    {
        p_kr[k]=m*p_k[k];
        printf(“度分布的取值%f\n“p_kr[k]);
        count_1+=p_kr[k];
    }
    // printf(“%f%f“countm);
    printf(“用于赋半桩的平均度求和%f公式系数%f\n“count_1m);
    EdgeNode * e;
    for(int i=0; i    {
        G->agjList[i].verNum=i;
        G->agjList[i].node_K=0;
        G->agjList[i].node_rand=0;
        G->agjList[i].firstarc=0;
    }
    for (int i=0; i    {
        double test=0.0;
        double p_count=p_kr[3];
        //srand((unsigned int)time(0));
        test=rand()/(double)(RAND_MAX);
        //printf(“第%d节点赋半桩的随机数%f\n“i+1test);
        for (int k=3; k<=k_Max; k++)
        {
            if(test<=p_count)
            {
                G->agjList[i].node_K=k;
                total_k+=k;
                break;
            }
            else
            {
                p_count+=p_kr[k+1];
                // printf(“累计赋半桩的度分布%f\n“p_count);
            }
            /* else
             {
             G->agjList[i].node_K=k_Max;
             total_k+=k_Max;
             break;
             }*/
            //printf(“没有跳出程序\n“);
        }
    }
    /*  for (int i=0; i          printf(“第%d个节点的度为%d\n“i+1G->agjList[i].node_K);*/
    printf(“总的节点度数%d\n“total_k);
    int length=total_k;//用来将半桩总数控制在偶数个长度内
    /* if(total_k%2==0)
         length=total_k;
     else
         {
             length=total_k-1;
             int m=rand()%(NetMaxSize)+1;//用来随机产生一个数作为要舍弃的半桩的节点编号
             G->agjList[m].node_K--;
         }*/
    int k_Array[length];//用来根据每个节点的度存放对应个数的节点编号
    for (int i=0; i        k_Array[i]=0;
    int length_record=0;//用来记录存入到k_Array数组中的位置
    for(int i=0; i

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-05-21 15:31  UCM\
     文件        1098  2018-05-12 19:58  UCM\UCM.cbp
     文件         136  2018-05-21 14:28  UCM\UCM.depend
     文件         355  2018-05-21 15:31  UCM\UCM.layout
     目录           0  2018-05-18 16:22  UCM\bin\
     目录           0  2018-05-21 14:48  UCM\bin\Debug\
     文件       36199  2018-05-21 14:48  UCM\bin\Debug\UCM.exe
     文件        7857  2018-05-21 14:48  UCM\main.c
     目录           0  2018-05-18 16:22  UCM\obj\
     目录           0  2018-05-21 14:48  UCM\obj\Debug\
     文件        7261  2018-05-21 14:48  UCM\obj\Debug\main.o
     文件        1351  2018-05-21 14:48  UCM\网络K与P(K)的值.txt

评论

共有 条评论

相关资源