$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Yu Huang (yuhuang_at_[hidden])
Date: 2005-09-05 15:30:10
Hi all,
I tried a clustering recursively cut the graph based on
betweenness_centrality and form the connected components into subgraphs
of the original big graph.
It's convenient to use subgraph("graph.create_subgraph()"), but the
trick is that whenever "remove_edge(e, subgraph)", the subgraph and its
ancestor graph is not affected(not like what the doc says).
Code sketch is like this:
vector<double> edge_centrality(no_of_edges);
EdgeCentralityMap ec_map(edge_centrality.begin(),
get(edge_index, subgraph));
indirect_cmp<EdgeCentralityMap, std::less<centrality_type> >
cmp(ec_map);
brandes_betweenness_centrality(subgraph,
edge_centrality_map(ec_map));
edgeDescriptor e = *max_element(edges(subgraph).first,
edges(subgraph).second, cmp);
centrality_type max_centrality = get(ec_map, e);
std::cerr<<"max_centrality is "<<max_centrality<<std::endl;
remove_edge(e, subgraph);
std::cerr<<"after removal the subgraph has
"<<num_edges(subgraph)<<" edges."<<std::endl;
The last error-reporting sentence lets me find that the edge e is not
removed from subgraph at all.
Even I tried to remove e from
graph("remove_edge(subgraph.local_to_global(e), graph)"), it also fails.
I hope somebody could have a check on it.
So i gave up the subgraph and directly create graphs(real graph) from
the components of the ancestor graph. It worked out.
Thanks,
Yu