BGLL算法!看不懂啊看不懂

orange725 2013-04-29 10:20:44
求大神解释一下BGLL算法的c++代码~~
笨蛋一个

#include "graph.h"

using namespace std;

Graph::Graph(char *filename, int type) {
ifstream finput;
finput.open(filename,fstream::in);

int nb_links=0;

while (!finput.eof()) {
if (nb_links%10000000==0) {cerr << "."; fflush(stderr);}

unsigned int src, dest, weight=1;

if (type==WEIGHTED)
finput >> src >> dest >> weight;
else
finput >> src >> dest;

if (finput) {
if (links.size()<=max(src,dest)+1)
links.resize(max(src,dest)+1);

links[src].push_back(make_pair(dest,weight));
links[dest].push_back(make_pair(src,weight));
nb_links++;
}
}

finput.close();
}

void
Graph::renumber(int type) {
vector<int> linked(links.size(),-1);
vector<int> renum(links.size(),-1);
int nb=0;

for (unsigned int i=0 ; i<links.size() ; i++) {
for (unsigned int j=0 ; j<links[i].size() ; j++) {
linked[i]=1;
linked[links[i][j].first]=1;
}
}

for (unsigned int i=0 ; i<links.size() ; i++) {
if (linked[i]==1)
renum[i]=nb++;
}

for (unsigned int i=0 ; i<links.size() ; i++) {
if (linked[i]==1) {
for (unsigned int j=0 ; j<links[i].size() ; j++) {
links[i][j].first = renum[links[i][j].first];
}
links[renum[i]]=links[i];
}
}
links.resize(nb);
}

void
Graph::clean(int type) {
for (unsigned int i=0 ; i<links.size() ; i++) {
if (i%10000000==0) fprintf(stderr,".");fflush(stderr);
map<int,int> m;
map<int,int>::iterator it;

for (unsigned int j=0 ; j<links[i].size() ; j++) {
it = m.find(links[i][j].first);
if (it==m.end())
m.insert(make_pair(links[i][j].first, links[i][j].second));
else if (type==WEIGHTED)
it->second+=links[i][j].second;
}

vector<pair<int,int> > v;
for (it = m.begin() ; it!=m.end() ; it++)
v.push_back(*it);
links[i].clear();
links[i]=v;
}
}

void
Graph::display(int type) {
cout << "Graph: " << endl;

for (unsigned int i=0 ; i<links.size() ; i++) {
for (unsigned int j=0 ; j<links[i].size() ; j++) {
int dest = links[i][j].first;
int weight = links[i][j].second;
if (type==WEIGHTED)
cout << i << " " << dest << " " << weight << endl;
else
cout << i << " " << dest << endl;
}
}
}

void
Graph::display_binary(char *filename, int type) {
ofstream foutput;
foutput.open(filename,fstream::out | fstream::binary);

int s = links.size();

foutput.write((char *)(&s),4);

int tot=0;
for (unsigned int i=0 ; i<links.size() ; i++) {
tot+=links[i].size();
foutput.write((char *)(&tot),4);
}

for (unsigned int i=0 ; i<links.size() ; i++)
for (unsigned int j=0 ; j<links[i].size() ; j++) {
int dest = links[i][j].first;
foutput.write((char *)(&dest),4);
}
if (type==WEIGHTED) {
for (unsigned int i=0 ; i<links.size() ; i++) {
for (unsigned int j=0 ; j<links[i].size() ; j++) {
int weight = links[i][j].second;
foutput.write((char *)(&weight),4);
}
}
}
}
...全文
454 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
orange725 2013-04-30
  • 打赏
  • 举报
回复
引用 1 楼 FancyMouse 的回复:
这一票图的初始化代码输出代码和算法本身毫无关系。
我连这段代码都没看懂是在说什么 求大神指点一二~
orange725 2013-04-30
  • 打赏
  • 举报
回复
我连这段代码都没看懂是在说什么
FancyMouse 2013-04-30
  • 打赏
  • 举报
回复
这一票图的初始化代码输出代码和算法本身毫无关系。

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧