資源簡介
網絡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例
評論
共有 條評論