资源简介
可以直接使用的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\li
文件 2290 2019-01-05 14:05 GN算法\Debug\GN.tlog\li
文件 384 2019-01-05 14:05 GN算法\Debug\GN.tlog\li
............此处省略24个文件信息
相关资源
- 国际象棋的qt源代码
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- VC++MFC小游戏实例教程(实例)+MFC类库
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- c++ 多功能计算器
- C++17 In Detail
- 嵌入式QtC++编程课件
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
- c++多边形交并差运算
川公网安备 51152502000135号
评论
共有 条评论