资源简介
可以直接使用的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个文件信息
相关资源
- C++dll生成给C#调用
- 大漠7.1933VIP所有工具+VC++新手注册安装
- c++ 飞翔的小鸟
- 06.什么是递归.wmv目前数据结构最好的
- 三菱PLC 上位机的SDK文档(1)一般的人
- Essential C++书籍&习题答案
- 《计算机常用数值算法与程序C++版》
- pageRank c++ 实现
- 公交自动化系统
- 基于TCP、IP的网络编程
- C++程序设计教程 第二版 习题及解答
- Microsoft Visual C++ 2010 x86 Runtime - 10.0.4
- TLD 全C++代码 OpenCV3.0.0 VS2013 工程文件
- 数字图像处理 完整源代码
- 非均匀B样条函数的C++程序实现可实现
- uml状态图的实用C/C++设计 中英文非扫
- C++常用经典算法源码
- 音乐播放器源代码 vc++ 6.0
- Visual C++面向对象与可视化程序设计
- meanShift视频目标跟踪 C++实现源代码
- 车牌识别c++源码
- VC++多人聊天室
- 计算机常用数值计算算法与程序 c++版
- InstallShield for Microsoft Visual C++ 6
- C++ GUI Qt4 编程中文第二版
- Using the C++ Standard Template Libraries《C+
- 光线跟踪算法C++源代码+文档
- 基于SOCKET的C++ 即时通讯系统
- c++开发的人工神经网络做人脸识别
- 模拟炒股源码 集合6个
评论
共有 条评论