#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; ImplGraph_t gg; int numNodes = atoi(argv[2]); std::map forwardMap; for(int i = 0; i < numNodes; i++) { vertex_t k = add_vertex(gg); //logstream<>sid>>did; while(ifs) { vertex_t src = forwardMap[sid]; vertex_t des = forwardMap[did]; add_edge(src, des, 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; }