📄 calculation.c
字号:
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define N 3939
#define n 50
#define m 100
main()
{
FILE *fp1,*fp2,*fp3,*fp4,*fp5,*fp6,*fp7,*fp8,*fp9,*fp10,*fp11,*fp12;
int i,j,k,l,d,r;
static int degree[N],adjmatrix[N][N],diameter[N][N],deg1[N],deg2[N],tag[N],lspace[N][N],pspace[N][N];
static float proba[N];
float x,resum; double sum;
double sum1,sum2,sum3,sum0;
int p,q,degt[N],degf[N];
float clu[N],degcorr[N],density[N],eff[N];
fp1=fopen("beijing.dat","r");
fp2=fopen("degree.txt","w");
fp3=fopen("deg-lsp.txt","w");
fp4=fopen("deg-psp.txt","w");
fp5=fopen("clu-lsp.txt","w");
fp6=fopen("clu-psp.txt","w");
fp7=fopen("dis-lsp.txt","w");
fp8=fopen("dis-psp.txt","w");
fp9=fopen("density-lsp.txt","w");
fp10=fopen("density-psp.txt","w");
fp11=fopen("eff-lsp.txt","w");
fp12=fopen("eff-psp.txt","w");
i=0; k=0; l=1;
while(!feof(fp1))
{ i++;
fscanf(fp1,"%d",&r);
if(r==4000)break;
if(r>0)
{ if(k>0)
{
printf("%d %d %d\n",k,r,j);
for(p=0;p<j;p++)
{lspace[tag[p]][tag[p+1]]=lspace[tag[p+1]][tag[p]]=1;
for(q=p+1;q<=j;q++)
{pspace[tag[p]][tag[q]]=pspace[tag[q]][tag[p]]=1;
}
}
}
tag[0]=r; degree[r]++;
j=0;
k++;
}
if(-r>N)printf("%d %d\n",r,k);
// printf("%d\n",r);
if(r<0)
{
tag[++j]=-r; degree[-r]++;
}
}
for(i=1;i<N;i++)
{for(j=1;j<N;j++)
{ deg1[i]=deg1[i]+lspace[i][j];
deg2[i]=deg2[i]+pspace[i][j];
}
fprintf(fp2,"%d\n",degree[i]);
fprintf(fp3,"%d\n",deg1[i]);
fprintf(fp4,"%d\n",deg2[i]);
}
sum=sum1=sum2=0;
for(i=1;i<N;i++) {sum1=sum1+deg1[i]; sum2=sum2+deg2[i]; } printf("%f %f\n",sum1/3938,sum2/3938);
//calculate the clustering coefficient in space L
for(i=1;i<N;i++)
{k=0; sum=0;
for(j=1;j<N;j++)
{if(lspace[i][j]==1){k++;degt[k]=j;}
}
for(p=1;p<=k;p++)
{for(q=p+1;q<=k;q++)
{if(lspace[degt[p]][degt[q]]==1)sum++;
}
}
if(k==1)clu[i]=0;
else clu[i]=2*sum/k/(k-1);
// printf("I love you");
density[i]=2*(sum+k)/k/(k+1);
eff[i]=k*(k+1)/2/(k*k-sum);
}
sum=0; for(i=1;i<N;i++)
{sum=sum+clu[i];
fprintf(fp5,"%f\n",clu[i]);
fprintf(fp9,"%f\n",density[i]);
fprintf(fp11,"%f\n",eff[i]);
}
sum=sum/(N-1); printf("The average clustering in space L is %f\n",sum);
//calculate the clustering coefficient in space P
for(i=1;i<N;i++)
{k=0; sum=0;
for(j=1;j<N;j++)
{if(pspace[i][j]==1){k++;degt[k]=j;}
}
for(p=1;p<=k;p++)
{for(q=p+1;q<=k;q++)
{if(pspace[degt[p]][degt[q]]==1)sum++;
}
}
if(k==1)clu[i]=0;
else clu[i]=2*sum/k/(k-1);
// printf("I love you");
density[i]=2*(sum+k)/k/(k+1);
eff[i]=k*(k+1)/2/(k*k-sum);
}
sum=0; for(i=1;i<N;i++)
{sum=sum+clu[i];
fprintf(fp6,"%f\n",clu[i]);
fprintf(fp10,"%f\n",density[i]);
fprintf(fp12,"%f\n",eff[i]);
}
sum=sum/(N-1); printf("The average clustering in space P is %f\n",sum);
//calculate the degree correlation
sum0=sum1=sum2=sum3=0;
for(i=1;i<N;i++)
{ sum=0;
for(j=1;j<N;j++)
{ if(lspace[i][j]==1)sum=sum+deg1[j];
}
sum1=sum1+sum*deg1[i];
sum0=sum0+deg1[i];
sum2=sum2+deg1[i]*deg1[i];
sum3=sum3+deg1[i]*deg1[i]*deg1[i];
}
sum=(sum1*sum0-sum2*sum2)/(sum3*sum0-sum2*sum2);
printf("The assortative coefficient in space L is %f\n",sum);
sum0=sum1=sum2=sum3=0;
for(i=1;i<N;i++)
{ sum=0;
for(j=1;j<N;j++)
{ if(pspace[i][j]==1)sum=sum+deg2[j];
}
sum1=sum1+sum*deg2[i];
sum0=sum0+deg2[i];
sum2=sum2+deg2[i]*deg2[i];
sum3=sum3+deg2[i]*deg2[i]*deg2[i];
}
sum=(sum1*sum0-sum2*sum2)/(sum3*sum0-sum2*sum2);
printf("The assortative coefficient in space P is %f\n",sum);
//calculate the average path length in space L
for(l=1;l<N;l++)
{ q=1;
for(j=1;j<N;j++){tag[j]=deg1[j]=deg2[j]=0;}
p=1; deg1[1]=l; tag[l]=1; d=0; goto L2;
L1: p=k; for(j=1;j<=p;j++)deg1[j]=deg2[j];
L2: k=0; d++;
for(i=1;i<=p;i++)
{
for(j=1;j<N;j++)
{if(tag[j]==1)continue;
if(j==deg1[i])continue;
if(lspace[deg1[i]][j]==1)
{ k++;
deg2[k]=j;
q++;
tag[j]=1;
diameter[l][j]=diameter[j][l]=d;
}
}
if(i==p&&k!=0) goto L1;
}
if(q!=(N-1))printf("the network is disconnected!%d\n",q); //printf("%d\n",l);
}
sum=0;
for(i=1;i<N;i++)
{for(j=1;j<N;j++){ sum=sum+diameter[i][j];fprintf(fp7,"%d ",diameter[i][j]);}
fprintf(fp7,"\n");
}
sum=sum/(N-1)/(N-2);
printf("The average path length in space L is %f\n",sum);
//calculate the average path length in space P
for(l=1;l<N;l++)
{ q=1;
for(j=1;j<N;j++){tag[j]=deg1[j]=deg2[j]=0;}
p=1; deg1[1]=l; tag[l]=1; d=0; goto L4;
L3: p=k; for(j=1;j<=p;j++)deg1[j]=deg2[j];
L4: k=0; d++;
for(i=1;i<=p;i++)
{
for(j=1;j<N;j++)
{if(tag[j]==1)continue;
if(j==deg1[i])continue;
if(pspace[deg1[i]][j]==1)
{ k++;
deg2[k]=j;
q++;
tag[j]=1;
diameter[l][j]=diameter[j][l]=d;
}
}
if(i==p&&k!=0) goto L3;
}
if(q!=(N-1))printf("the network is disconnected!%d\n",q);
}
sum=0;
for(i=1;i<N;i++)
{for(j=1;j<N;j++) {sum=sum+diameter[i][j];fprintf(fp8,"%d ",diameter[i][j]);}
fprintf(fp8,"\n");
}
sum=sum/(N-1)/(N-2);
printf("The average path length in space P is %f\n",sum);
printf("I love you\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -