资源简介
网络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
- 上一篇:ER网络的C语言实现
- 下一篇:C语言程序设计经典100例
评论
共有 条评论