#include // for std::size_t #include #include using namespace std; #include #include #include #include using namespace boost; typedef boost::property > VertexProperties; typedef boost::adjacency_list Graph; // Graph object type typedef boost::graph_traits::vertex_descriptor Vertex; typedef boost::graph_traits::edge_descriptor Edge; typedef boost::graph_traits::vertex_iterator vertex_iterator; typedef boost::graph_traits::adjacency_iterator adjacency_iterator; typedef Graph::inv_adjacency_iterator inv_adjacency_iterator; typedef boost::property_map::type vertex_name_map_t; class VisitorClass : public dfs_visitor<> { public: VisitorClass() {} template void back_edge(Edge, const Graph&) const { cout << "back edge" << endl; } }; int main() { Graph g; vertex_name_map_t vertex_names = get(vertex_name, g); Vertex v = add_vertex(g); Vertex u = add_vertex(g); vertex_names[v] = string("v"); vertex_names[u] = string("u"); bool inserted; tie(tuples::ignore, inserted) = add_edge(v, u, g); assert(inserted); VisitorClass vst; depth_first_search(g, visitor(vst)); // Should not print "back edge", but does. return 0; }