]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/graph/example/remove_edge_if_undir.cpp
1 //=======================================================================
2 // Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
3 // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
5 // Distributed under the Boost Software License, Version 1.0. (See
6 // accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt)
8 //=======================================================================
10 #include <boost/config.hpp>
12 #include <boost/graph/adjacency_list.hpp>
13 #include <boost/graph/graph_utility.hpp>
15 using namespace boost
;
25 1(0,3) 2(0,3) 3(1,3) 4(2,0) 5(3,2)
27 removing edges connecting 0 and 3
33 removing edges with weight greater than 3
42 typedef adjacency_list
< vecS
, vecS
, undirectedS
, no_property
,
43 property
< edge_weight_t
, int > >
46 struct has_weight_greater_than
48 has_weight_greater_than(int w_
, Graph
& g_
) : w(w_
), g(g_
) {}
49 bool operator()(graph_traits
< Graph
>::edge_descriptor e
)
51 #if defined(BOOST_MSVC) && BOOST_MSVC <= 1300
52 property_map
< Graph
, edge_weight_t
>::type weight
= get(edge_weight
, g
);
53 return get(weight
, e
) > w
;
55 // This version of get breaks VC++
56 return get(edge_weight
, g
, e
) > w
;
65 typedef std::pair
< std::size_t, std::size_t > Edge
;
67 = { Edge(0, 3), Edge(0, 3), Edge(1, 3), Edge(2, 0), Edge(3, 2) };
69 #if defined(BOOST_MSVC) && BOOST_MSVC <= 1300
71 for (std::size_t j
= 0; j
< 5; ++j
)
72 add_edge(edge_array
[j
].first
, edge_array
[j
].second
, g
);
74 Graph
g(edge_array
, edge_array
+ 5, 4);
76 property_map
< Graph
, edge_weight_t
>::type weight
= get(edge_weight
, g
);
79 graph_traits
< Graph
>::edge_iterator ei
, ei_end
;
80 for (boost::tie(ei
, ei_end
) = edges(g
); ei
!= ei_end
; ++ei
)
83 std::cout
<< "original graph:" << std::endl
;
84 print_graph(g
, get(vertex_index
, g
));
85 print_edges2(g
, get(vertex_index
, g
), get(edge_weight
, g
));
86 std::cout
<< std::endl
;
88 std::cout
<< "removing edges connecting 0 and 3" << std::endl
;
89 remove_out_edge_if(vertex(0, g
), incident_on(vertex(3, g
), g
), g
);
90 print_graph(g
, get(vertex_index
, g
));
91 print_edges2(g
, get(vertex_index
, g
), get(edge_weight
, g
));
93 std::cout
<< "removing edges with weight greater than 3" << std::endl
;
94 remove_edge_if(has_weight_greater_than(3, g
), g
);
95 print_graph(g
, get(vertex_index
, g
));
96 print_edges2(g
, get(vertex_index
, g
), get(edge_weight
, g
));