#include#include#include#include#include#include
#define maxvertexnum 90000
#define rand_max 0x7fff
//邊表節點
typedef structnode
edgenode;//頂點表節點
typedef structvnode
vertexnode;
typedef vertexnode adjlist[maxvertexnum];//圖的結構
typedef structalgraph;//返回檔案行數(網路邊數),有換行符"\n"就為一行
int lines(char*str)
returnlines;
}//返回檔案最大數(網路節點數)
int max(char*str)
file*fp;char*p;int line=lines(str);int i=0;int a=0;int b=0;
fp=fopen(str,"r");char buf[256];if((fp=fopen(str,"r"))==null)
perror("fail to read");
exit(1);
}//把檔案的內容給buf
while(fgets(buf,line,fp)!=null)
returni;
}//建立圖
void createalgraph(algraph* g,char*str)
file*fp;int line=lines(str);int node=max(str);//其中最大數
g->vexnum=node+1;//因為是從0開始,所以+1,多了乙個0
g->arcnum=line;
fp=fopen(str,"r");char buf[1024];intlen;intm;intn;
edgenode*s;char*p;int a=0;int b=0;int i=0;char strline[1024];//每個節點的頂點表(vn1(i),vn2(i))
int vn1[line];//這裡本來要用vn[line],如果是vc++就不能通過編譯,有多少行就有多少(i,j)
intvn2[line];//頂點錄入
for(int j=0;jvexnum;j++)
g->adjlist[j].vertex=j;
g->adjlist[j].firstedge=null;
g->adjlist[j].nodestate=1;
}if((fp=fopen(str,"r"))==null)
perror("faile to read");
exit(1);
}while(!feof(fp))//因為行數等於邊數,則讀取行數個就可以把其他的節點的連線讀完
fgets(strline,1024,fp);
sscanf(strline,"%d%d",&a,&b);
vn1[i]=a;
vn2[i]=b;
i++;
}//邊節點放入鍊錶//一行就是乙個座標,有多少行就有多少座標
for(int k=0;k
m=vn1[k],n=vn2[k];int ii=0;
edgenode*p;
p=g->adjlist[m].firstedge;while(p!=null)
if(ii!=1)
s=(edgenode*)malloc(sizeof(edgenode));
s->adjvex=n;//相連線的頂點
s->next=null;
s->next=g->adjlist[m].firstedge;//類似於自己寫的鍊錶
g->adjlist[m].firstedge=s;//無向圖 有來回
s=(edgenode*)malloc(sizeof(edgenode));
s->adjvex=m;
s->next=null;
s->next=g->adjlist[n].firstedge;
g->adjlist[n].firstedge=s;
}//深度為每個節點後面連線的鏈長度
edgenode*q;for( i=0;ivexnum;i++)
//列印鄰接表
void printgraph(algraph*g)
edgenode*s;for(int i=0;ivexnum;i++)
s=g->adjlist[i].firstedge;//s為乙個帶adjvex,next指標的邊表節點
while(s)
printf("(%d,%d)",g->adjlist[i].vertex,s->adjvex);
s=s->next;
printf("\n");
}//所屬層插入
void insertlayer(algraph* g,intlayer)
//打印度中心性
void printdegreecentrality(algraph*g)
//計算特徵向量中心性
void eigenvector_centrality(algraph *g)
if(e1[i]>max)
max=e1[i];//記錄本次的最大指標
}for(int i=0; ivexnum; i++)
if((1.0/max1-1.0/max)<0.01&&(1.0/max1-1.0/max)>-0.01)
flag=1;//當差值較小時也可結束迴圈//保留這次的結果到e中,並且將ei重置為0,方便下次計算
for(int i=0; ivexnum; i++)
e[i]=e1[i];
e1[i]=0;
}for(int i=0; ivexnum; i++)
e[i]=e[i]/max;
g->adjlist[i].ec=e[i];
}/*1.sir傳播模型,改變node.state(0為感染,1為易感染,2為恢復。所有節點初始化為1)
2.sir函式主要操作感染點,感染點會做兩件事:①感染易感節點;②感染節點恢復
3.傳播完成的標誌為不能再感染新的節點,並返回處於恢復節點的個數*/
int sir(algraph* g,int a,int arraylength,double inf,doublerec)//傳入的分別為網路,感染節點陣列,陣列長度,感染率,恢復率
for(i=0;i
newinf[i]=0;
}double infection=inf;//感染概率
int count=inftatal;//當前網路中的感染個數
srand((unsigned)time(null)); //設定種子,用於隨機數產生
while(count>0)//還能繼續感染
//感染節點恢復(不包括上一步新感染的)
for(i=0;i
elseint recnum=0;//統計傳播結束後,處於恢復狀態的節點個數
for(i=0;ivexnum;i++)
returnrecnum;
}intmain()
;int arraylenth=sizeof(a)/sizeof(int);//sir
printf("recnum=%d",sir(g1,a,arraylenth,0.6,0.2));return 0;
EM演算法初始值設定的影響 三硬幣模型
先自定義pi,p,q的值,隨機生成實驗結果,真實 pi 0.3500.p 0.6600.q 0.3300 產生的實驗資料 pi 0.3522.p 0.6729.q 0.3341 將實驗結果帶入em演算法估計pi,p,q的值 第一次theta的初始值設定的裡真實值比較遠,初值設定為 pi 0.5000...
DateTime 賦初始值
今天在將資料庫裡的datetime型別資料賦給c 裡datetime型別變數的時候遇到乙個問題,那就是資料庫裡面的datetime資料存在null值。c 預設不能將null賦給datetime變數,但是可以使用nullable型別的datetime,只需在宣告變數的時候在datetime後加乙個?號...
討論 C Calendar賦初始值
q 我在page load的時候給calendar賦初始值,但是page顯示之後,calendar顯示是當天 比如今天顯示7月12號 我想讓它預設顯示出我給賦的時間 8 30 2006 我該怎麼去設定呢?a calendar1.selecteddate new datetime datetime.n...