添加K-CORE值进入运算

将不同方法进行对比并写入relative文件

#include<stdio.h>
#include<stdlib.h>
//对rate和ec和degree进行排序
//str传入需要排序的文件,line传入文件行数即节点数
 void sortByRate(char* str,int line){
     FILE* fp;
    
     float ex;//用于rate和ec的比较
     int ex1;//用于degree的比较
     int temp;
    int a;
    float b;
    float c;
    int i=0;
    int j=0;
    int p=0;
    //用于排序的degeree,ec,rate
    int degree[2000];
    float ec[2000];
    float rate[2000];
    //记录节点真实的degeree,ec,rate
    int degree1[2000];
    float ec1[2000];
    float rate1[2000];
//记录节点变化
    int dflag[2000];
    int eflag[2000];
    int rflag[2000];

    fp=fopen(str,"r");
    char buf[1024];
    char StrLine[1024];
    if((fp=fopen(str,"r"))==NULL)
    {
    perror("faile to read");
    exit(1);
    }
int max=0;
while(!feof(fp))//因为行数等于边数,则读取行数个就可以把其他的节点的连接读完
    {

fgets(StrLine,1024,fp);
sscanf(StrLine,"%d%f%f",&a,&b,&c);

     degree[i]=a;
     ec[i]=b;
     rate[i]=c;

     degree1[i]=a;
     ec1[i]=b;
     rate1[i]=c;
    
    i++;
    
    
    }


//对感染率排序
    for( p=0;p<line;p++)
    {
    rflag[p]=p;
    }
     for(i=0;i<line;i++){
         for( j=0;j<line-i-1;j++){
             if(rate[j]<rate[j+1]){
                temp=rflag[j];
                rflag[j]=rflag[j+1];
                rflag[j+1]=temp;
                 
                ex=rate[j];
                rate[j]=rate[j+1];
                rate[j+1]=ex;
                 }
            
        
                                    }
                             }
//对度排序
for( p=0;p<line;p++)
    {
    dflag[p]=p;
    
    }
     for(i=0;i<line;i++){
         for( j=0;j<line-i-1;j++){
             if(degree[j]<degree[j+1]){
                temp=dflag[j];
                dflag[j]=dflag[j+1];
                dflag[j+1]=temp;
                 
                ex1=degree[j];
                degree[j]=degree[j+1];
                degree[j+1]=ex1;
                 }
            
        
                                    }
                             }
//对特征向量中心性排序
for( p=0;p<line;p++)
    {
    eflag[p]=p;
    }
     for(i=0;i<line;i++){
         for( j=0;j<line-i-1;j++){
             if(ec[j]<ec[j+1]){
                temp=eflag[j];
                eflag[j]=eflag[j+1];
                eflag[j+1]=temp;
                 
                ex=ec[j];
                ec[j]=ec[j+1];
                ec[j+1]=ex;
                 }
            
        
                                    }
                             }
    /*
    //比较数值所属节点从大往小排
    for(int k=0;k<line;k++)
    {
    
    printf("%d ",eflag[k]);
    }
    //比较的数值从大往小排
    printf("\n-------\n");
    for( int k=0;k<line;k++)
    {
        printf("%f ",ec[k]);
    
    }
    
    */
    //计算相关性
    //节点比例依次从0.05到0.2(i=比例*2000)
    FILE* fp2;
    char* str2="E:\\data_set\\relative.txt";//写入结果的文件 
    fp2=fopen(str2,"w");
     for(int nodeNum=10;nodeNum<=400;nodeNum=nodeNum+10){
    float i;
    i=nodeNum/2000.0;//nodeNum占总个数的比例 
    int k=0;
    float x1=0;
    float x2=0;
    float num1=0;
    float num2=0;
     for( k=0;k<nodeNum;k++)
    {
    x1+=ec1[dflag[k]];
    }
    for( k=0;k<nodeNum;k++)
    {
    x2+=ec[k];
    }
    num1=1.0-(x1/x2);
    //printf("degree is: %f \n",1.0-(x1/x2));
    
    
     for( k=0;k<nodeNum;k++)
    {
    x1+=ec1[eflag[k]];
    }
    for( k=0;k<nodeNum;k++)
    {
    x2+=ec[k];
    }
    num2=1.0-(x1/x2);
    //printf("the ec is: %f \n",1.0-(x1/x2));
    fprintf(fp2,"%.3f    %.6f    %.6f\n",i,num1,num2);
    
}
 } 


int main(){
    
    char* str="E:\\data_set\\result2a.txt";//传入的文件必须没有空格 
    
    
    sortByRate( str,2000);
    
    return 0;
}

 

上一篇:什么是ROHS检测,怎么做


下一篇:selenium web中的下拉选项操作