资源简介
可以直接运行的代码,有详细文字说明,复杂网络中社团划分经典GN算法的实现
代码片段和文件信息
#include “MyGN.h“
#include “stdio.h“
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
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 214016 2014-03-16 14:54 GN_c\Debug\GN.bsc
文件 249904 2014-03-16 14:54 GN_c\Debug\GN.exe
文件 274208 2014-03-16 14:54 GN_c\Debug\GN.ilk
文件 1447744 2014-03-16 14:54 GN_c\Debug\GN.pch
文件 476160 2014-03-16 14:54 GN_c\Debug\GN.pdb
文件 139399 2014-03-16 14:54 GN_c\Debug\Test.obj
文件 0 2014-03-16 14:54 GN_c\Debug\Test.sbr
文件 66560 2014-03-16 14:54 GN_c\Debug\vc60.idb
文件 94208 2014-03-16 14:54 GN_c\Debug\vc60.pdb
文件 508 2013-04-20 10:11 GN_c\Dian.h
文件 4673 2013-04-20 22:49 GN_c\GN.dsp
文件 510 2013-04-19 16:16 GN_c\GN.dsw
文件 74752 2014-03-16 14:59 GN_c\GN.ncb
文件 53760 2014-03-16 14:59 GN_c\GN.opt
文件 1007 2014-03-16 14:54 GN_c\GN.plg
文件 16918 2013-04-21 10:24 GN_c\GN_use.h
文件 552 2010-05-16 20:33 GN_c\input.txt
文件 11542 2013-04-21 12:39 GN_c\MyGN.h
文件 324 2013-04-20 10:02 GN_c\Point_belong.h
文件 1054 2013-04-20 10:13 GN_c\Queue.h
文件 366 2013-04-20 10:03 GN_c\S_remove_belong.h
文件 7296 2014-03-12 17:05 GN_c\Test.cpp
文件 608 2013-04-20 10:03 GN_c\V_side.h
目录 0 2014-03-16 14:54 GN_c\Debug
目录 0 2014-03-16 14:59 GN_c
----------- --------- ---------- ----- ----
3136069 25
相关资源
- PCL点云库MovingLeastSquares用法demo
- 进销存货物管理系统课程设计
- SIMD指令集大全
- 数据结构看病排队实验报告
- 多目标问题RM-MOEAMOEAD的改进版,by张青
- 华南农业大学数据结构上机题目答案
- 汽车修理管理系统源码
- glut工具库
- UE4串口,蓝图可调用,4.24.3亲测可使
- graphics包包含graphics.lib.rar
- 华为机试题2020.zip
- 实验三:AES加密算法
- 鼠标自动点击程序
- CNFIX3.0.rar
- CMatrix
- Proteus8.9 仿真STM32407ZGT6系列基础模板
- GDI+柱状图
- 制作动画GIF的VC源代码,八叉树算法生
- 面向对象程序设计实验报告
- 进程状态转换包括创建、删除、调度
- 经典的背包问题九讲,必看
- 模拟退火算法解决TSP问题
- 操作系统设计一个按优先权调度算法
- 驱动执行应用层代码之KeuserModeCallba
- 虚拟磁盘MINIPORT驱动代码
- 最新的libssh2库源码
- 模拟IPINTERNET PROTOCOL数据分片和重组
- 火车车厢重排列问题 堆栈解决
- 山东大学数据结构课设箱子装箱问题
- som神经网络用于实现图像压缩
评论
共有 条评论