BGLL算法 C++实现

实际上,BGLL算法就是在CNM算法的基础之上,再进一步,通过将CNM算法的结果中处于同一个社团的节点看作一个节点,再使用CNM算法进行社团划分,照此步骤反复迭代,每一次迭代记作一个pass,直到无法继续划分为止(就是在节点合并后,Q也不再增加)。从而尽量减轻因CNM算法的贪心策略造成的社团划分效果不佳,CNM算法实现可参考前文《CNM算法C++实现》

下文示例数据下载链接:facebook_combined

#include
#include
#include
#define N 10000
#define INF 100000000
using namespace std;

int flag,nn,n,M,row,col,A[N][N],B[N][N],book[N],root[N],term[N];
float delta_Q[N][N],a[N],Q,now_Q_change;
void readData();
void initialize();
float themax();
void update_Q_delta();
void printResult();
void solve(int nn);
void formB();

int main()
{
    cin>>nn;
    fstream readfile;
    readfile.open("C:\\Users\\lenovo\\Desktop\\网络科学导论cpp代码\\facebook_combined.txt",ios::in);
    if(!readfile.is_open ())
        cout << "Open file failure" << endl;
    flag=1;
    Q=0;
    int t=0;
    int v1,v2;
    while (!readfile.eof())            // 若未到文件结束一直循环
    {
        readfile >> v1 >> v2;
        //cout<0.0000001)
    {
        flag=1;
        //cout<<"(row,col):("<j)
                M+=A[i][j];
        }
    }
    /*
    for (int i=1;i<=n;i++)
    {
        for (int j=1;j<=n;j++)
        {
            cout<0)
            {
                delta_Q[i][j]=temp-a[i]*a[j];
            }
            else
                delta_Q[i][j]=0;
        }
    }
    /*
    for (int i=1;i<=n;i++)
    {
        for (int j=1;j<=n;j++)
        {
            cout<

结果的话由于实在太长,所以只截取了部分关键结果(相邻两次迭代连接处),最终一共是迭代了五次。

BGLL算法 C++实现_第1张图片

BGLL算法 C++实现_第2张图片

BGLL算法 C++实现_第3张图片

你可能感兴趣的:(C++,算法,复杂网络)