• 大小: 8.54MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-10-10
  • 语言: C/C++
  • 标签: C++  GN  

资源简介

可以直接使用的C++实现GN算法,亲测有效,如有疑问,请各位私聊。

资源截图

代码片段和文件信息

#include “MyGN.h“
#include 

int main(){

int ij;
vector vec_relationship;//记录有链接的边。
int max=0;//这个是max是点的个数

//从文件input.txt读数据
FILE *f_input = fopen(“input.txt“ “r“);
char *s = (char*)malloc(20);
//char *c;

if (f_input != NULL)
{
fgets(s 100 f_input);

int i = 0;

for (i = 0; s[i] != ‘-‘; i++)
{
max = 10 * max + s[i] - 48;
}

while (feof(f_input) == 0)
{
fgets(s 100 f_input);

int m = 0;
int n = 0;

for (i = 0; s[i] != ‘:‘; i++)
{
m = 10 * m + s[i] - 48;
}
for (i = i + 1; s[i] != ‘-‘; i++)
{
n = 10 * n + s[i] - 48;
}

V_side v_sd(m-1 n-1 1);
vec_relationship.push_back(v_sd);
}

}

fclose(f_input);

int *r_sign = new int[max];//记录矩阵中行号为i的元素(边)在vec_relationship 中出现的首索引
//r_sign数组先统一赋值为-1
for(i = 0; i < max; i++)
{
r_sign[i] = -1;
}

GN_use::v_order(&vec_relationship r_sign max);//对vec_relationship中的内容进行排序整理

//下面是GN算法的实现

//当Q值最大时,Q_i存放数组result_temp[][]中对应的行号i,以便在输出结果的时候容易找到。
int Q_i=0;
//result_temp_i是在存储各种Q值下分裂得到各个点的社团隶属情况要用到的行号下标变量,也就是数组result_temp[][]的行号下标,最后一次的分裂情况下的行号记录在result_temp_i中。
int result_temp_i=0;
//vec_result_temp数组每行下标0到max-1的是存放每个点隶属的集团号,存放每种Q 值下的分裂情况,每行对应一种情况,元素vec_result_temp.Q存放对应的Q值,
vector vec_result_temp; 
//vec_V_remove_belong数组用来存放每次去除介数最大的边的隶属情况,比如v(ij)是在分裂为两个集团时去除的,则vec_V_remove_belong.x=i-1vec_V_remove_belong.x=j-1,若是
//分裂为三个集团时去除的,则vec_V_remove_belong.belong_clique值为3
vector vec_V_remove_belong;
//若原始网络本身就是由几个孤立的社团构成的,original_community_alones+2是记录原始网络的孤立社团数目,
//在vec_result_temp数组中,0到original_community_alones-1的行号记录的是原始网络中的社团检测情况。从行号为original_community_alones记录的是由于去除最大介数边的分裂情况。
int original_community_alones=0;

MyGN GN_DEAL(0);

GN_DEAL.GN_deal(&vec_relationshipr_signmax&vec_result_temp &vec_V_remove_belong);//GN算法的入口函数

original_community_alones=GN_DEAL.get_original_community_alones();
Q_i=GN_DEAL.get_Q_i();
result_temp_i=GN_DEAL.get_result_temp_i();

//如果原始网络时由几个孤立社团构成,要输出
//若原始网络本来是由几个孤立的社团组成的,要弄清楚,所求的社团数目是original_community_alones+1,因为original_community_alones的下标是从1开始的

int k3out_temp=0;
if(original_community_alones!=0){

printf(“原始网络是由%d个孤立的社团构成的:\n“original_community_alones+1);

for(j=0; j printf(“\n集团%d:“(j+1));
for(k3=0; k3 out_temp = vec_result_temp.at(original_community_alones-1).point_belong_to[k3];
if(out_temp==j){
printf(“%d  “k3+1);
}
}

}
}
else{
for(int r_t = 0; r_t < max; r_t++)
for(int c_t = r_t+1; c_t < max; c_t++ ){
GN_use::find_vec_index(r_t c_t r_sign &vec_relationship);//int position = GN_use.position_find(r_tc_t);
}

printf(“\n原始网络为:“);

for(i=0; i printf(“%d  “i+1);
}

printf(“\n\n“);
}

//最后把分裂的最佳情况输出,注意Q_i的下标是从0开始的。
//注意分

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-01-05 14:05  GN算法\
     目录           0  2019-01-05 13:12  GN算法\.vs\
     目录           0  2019-01-05 13:12  GN算法\.vs\GN\
     目录           0  2019-01-05 13:14  GN算法\.vs\GN\v15\
     文件       53760  2019-01-05 14:05  GN算法\.vs\GN\v15\.suo
     文件     4513792  2019-01-05 14:05  GN算法\.vs\GN\v15\Browse.VC.db
     目录           0  2019-01-05 13:13  GN算法\.vs\GN\v15\ipch\
     目录           0  2019-01-05 13:14  GN算法\.vs\GN\v15\ipch\AutoPCH\
     目录           0  2019-01-05 14:04  GN算法\.vs\GN\v15\ipch\AutoPCH\3f3270e5cf1ad30f\
     文件    24510464  2019-01-05 14:04  GN算法\.vs\GN\v15\ipch\AutoPCH\3f3270e5cf1ad30f\TEST.ipch
     目录           0  2019-01-05 13:12  GN算法\Backup\
     目录           0  2019-01-05 13:14  GN算法\Backup1\
     文件        1062  2019-01-05 13:14  GN算法\Backup1\GN.sln
     目录           0  2019-01-05 14:05  GN算法\Debug\
     文件      986112  2019-01-05 14:05  GN算法\Debug\GN.bsc
     文件        1539  2019-01-05 14:04  GN算法\Debug\GN.Build.CppClean.log
     文件      953344  2019-01-05 14:05  GN算法\Debug\GN.exe
     文件     2566100  2019-01-05 14:05  GN算法\Debug\GN.ilk
     文件        1713  2019-01-05 14:05  GN算法\Debug\GN.log
     文件     8474624  2019-01-05 14:05  GN算法\Debug\GN.pdb
     目录           0  2019-01-05 14:05  GN算法\Debug\GN.tlog\
     文件         192  2019-01-05 14:05  GN算法\Debug\GN.tlog\bscmake.command.1.tlog
     文件         356  2019-01-05 14:05  GN算法\Debug\GN.tlog\bscmake.read.1.tlog
     文件         196  2019-01-05 14:05  GN算法\Debug\GN.tlog\bscmake.write.1.tlog
     文件         718  2019-01-05 14:05  GN算法\Debug\GN.tlog\CL.command.1.tlog
     文件        9440  2019-01-05 14:05  GN算法\Debug\GN.tlog\CL.read.1.tlog
     文件         486  2019-01-05 14:05  GN算法\Debug\GN.tlog\CL.write.1.tlog
     文件         236  2019-01-05 14:05  GN算法\Debug\GN.tlog\GN.lastbuildstate
     文件         960  2019-01-05 14:05  GN算法\Debug\GN.tlog\link.command.1.tlog
     文件        2290  2019-01-05 14:05  GN算法\Debug\GN.tlog\link.read.1.tlog
     文件         384  2019-01-05 14:05  GN算法\Debug\GN.tlog\link.write.1.tlog
............此处省略24个文件信息

评论

共有 条评论