#include #include #include #include #include #include #include #include #include #include #include using namespace boost; int main() { typedef property edge_prop; typedef property > vertex_prop; //typedef adjacency_list Graph; typedef adjacency_list Graph; //typedef adjacency_list Graph; typedef property_map::type vertex_name_map_t; typedef property_map_equivalent vertex_comp_t; typedef property_map::type edge_name_map_t; typedef property_map_equivalent edge_comp_t; Graph graph1; add_vertex(vertex_prop('a'), graph1); add_edge(0, 0, edge_prop('a'), graph1); Graph graph2; add_vertex(vertex_prop('a'), graph2); add_edge(0, 0, edge_prop('a'), graph2); // vertex / edge predicates vertex_comp_t vertex_comp = make_property_map_equivalent(get(vertex_name, graph1), get(vertex_name, graph2)); edge_comp_t edge_comp = make_property_map_equivalent(get(edge_name, graph1), get(edge_name, graph2)); // compute subgraph iso std::cout << "Matched verices: " << std::endl; vf2_print_callback callback(graph1, graph2); vf2_subgraph_iso(graph1, graph2, callback, vertex_order_by_mult(graph1), edges_equivalent(edge_comp).vertices_equivalent(vertex_comp)); // out_edges std::cout << "Out edges: " << std::endl; std::set::edge_descriptor> edges; graph_traits::out_edge_iterator e, e_end; for (tie(e, e_end) = out_edges(0, graph1); e != e_end; ++e) { std::cout << "(" << source(*e, graph1) << "," << target(*e, graph1) << ")" << ", " << *e << std::endl; edges.insert(*e); } std::cout << std::endl; std::cout << "num different edge descriptors: " << edges.size() << std::endl; return 1; }