⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calculation.c

📁 一个用于复杂网络研究中计算网络静态参数(度分布
💻 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 + -