#include #include #include #include #include "t.hpp" namespace std { std::ostream& operator<<(std::ostream &os, const outel_t &o) { std::copy(o.begin(), o.end(), std::ostream_iterator(os," ")); return os << std::endl; } } struct my_visitor : boost::default_bfs_visitor { template void examine_edge(Edge e, const G &g) { std::cout << "Examine edge: " << e << std::endl; my_graph &g_ = const_cast(g.get_graph()); Vertex s = boost::source(e, g_); Vertex t = boost::target(e, g_); boost::put(&vp_t::pred, g_, t, e); boost::put(&vp_t::pv, g_, t, s);/**/ } }; typedef boost::property_map::type vim_t; outel_t goutel; int main() { const size_t N = 5; my_graph g(N); using namespace boost; for (size_t i = 0; i < N; ++i) { put(&vp_t::pv, g, i, i); for (size_t ii = 0; ii < N; ++ii) { Edge e = add_edge(i, ii, g).first; } } graph_wrapper gw(g); print_graph(gw, get(vertex_index, g)); graph_traits::edge_iterator ei, ei_end; for (tie(ei, ei_end) = edges(g); ei != ei_end; ++ei) { Vertex t = boost::target (*ei, g); outel_t el; graph_traits::out_edge_iterator oei, oei_end; for (tie(oei, oei_end) = out_edges(t, g); oei != oei_end; ++oei) { if (boost::target(*oei, g) % 2) { el.push_back(*oei); } } put(&ep_t::outel, g, *ei, el); } boost::queue Q; boost::vector_property_map col(get(vertex_index, g)); boost::breadth_first_visit(gw, *boost::vertices(gw).first, Q, my_visitor(), col); // boost::breadth_first_visit(g, *boost::vertices(g).first, Q, // my_visitor(), col); return 0; }