#include #include #include #include #include #include using namespace boost; typedef boost::adjacency_list ImplGraph_t; typedef ImplGraph_t::vertex_descriptor vertex_t; typedef ImplGraph_t::edge_descriptor edge_t; typedef graph_traits::vertices_size_type size_type; int main(int argc, char** argv) { std::ifstream ifs(argv[1]); std::ofstream logstream("TClog.txt"); int sid, did; ifs>>sid>>did; ImplGraph_t gg; while(ifs) { add_edge(sid, did, gg); ifs>>sid>>did; } std::cout<<" "< rank; boost::associative_property_map< std::map > rank_map(rank); // std::map parent; // boost::associative_property_map< std::map > parent_map(parent); std::vector parent(num_vertices(gg)); typedef vertex_t* Parent_t; disjoint_sets< boost::associative_property_map >, Parent_t > ds(rank_map, &parent[0]); initialize_incremental_components(gg, ds); incremental_components(gg, ds); edge_t e; vertex_t src; vertex_t des; typedef component_index Components_t; Components_t components(&parent[0], &parent[0]+parent.size()); for (Components_t::size_type c = 0; c < components.size(); ++c) { std::cout << "component " << c << " contains: "; Components_t::value_type::iterator j = components[c].begin(), jend = components[c].end(); for ( ; j != jend; ++j) std::cout << *j << " "; std::cout << std::endl; } return 0; }