Copied over new version of implicit_graph.cpp from Github

[SVN r64065]
This commit is contained in:
Jeremiah Willcock 2010-07-16 04:27:33 +00:00
parent 286c831903
commit 3edc92eebc

View File

@ -178,10 +178,6 @@ Iterator over edges incident on a vertex in a ring graph.
For vertex i, this returns edge (i, i+1) and then edge (i, i-1), wrapping For vertex i, this returns edge (i, i+1) and then edge (i, i-1), wrapping
around the end of the ring as needed. around the end of the ring as needed.
Because this is an undirected graph, the edge <x,y> is equivalent to <y,x>.
For clarity's sake, however, this iterator always returns an edge descriptor
with the smaller vertex index first.
It is implemented with the boost::iterator_adaptor class, adapting an It is implemented with the boost::iterator_adaptor class, adapting an
offset into the dereference::ring_offset array. offset into the dereference::ring_offset array.
*/ */
@ -438,6 +434,10 @@ boost::identity_property_map get(boost::vertex_index_t, const ring_graph&) {
return boost::identity_property_map(); return boost::identity_property_map();
} }
// Print edges as (x, y)
std::ostream& operator<<(std::ostream& output, const edge_descriptor& e) {
return output << "(" << e.first << ", " << e.second << ")";
}
int main (int argc, char const *argv[]) { int main (int argc, char const *argv[]) {
using namespace boost; using namespace boost;
@ -465,11 +465,11 @@ int main (int argc, char const *argv[]) {
// Print the outgoing edges of all the vertices. For n=5 this will print: // Print the outgoing edges of all the vertices. For n=5 this will print:
// //
// Vertices, outgoing edges, and adjacent vertices // Vertices, outgoing edges, and adjacent vertices
// Vertex 0: <0, 1> <0, 4> Adjacent vertices 1 4 // Vertex 0: (0, 1) (0, 4) Adjacent vertices 1 4
// Vertex 1: <1, 2> <1, 0> Adjacent vertices 2 0 // Vertex 1: (1, 2) (1, 0) Adjacent vertices 2 0
// Vertex 2: <2, 3> <2, 1> Adjacent vertices 3 1 // Vertex 2: (2, 3) (2, 1) Adjacent vertices 3 1
// Vertex 3: <3, 4> <3, 2> Adjacent vertices 4 2 // Vertex 3: (3, 4) (3, 2) Adjacent vertices 4 2
// Vertex 4: <4, 0> <4, 3> Adjacent vertices 0 3 // Vertex 4: (4, 0) (4, 3) Adjacent vertices 0 3
// 5 vertices // 5 vertices
std::cout << "Vertices, outgoing edges, and adjacent vertices" << std::endl; std::cout << "Vertices, outgoing edges, and adjacent vertices" << std::endl;
vertex_iterator vi, vi_end; vertex_iterator vi, vi_end;
@ -478,10 +478,8 @@ int main (int argc, char const *argv[]) {
std::cout << "Vertex " << u << ": "; std::cout << "Vertex " << u << ": ";
// Adjacenct edges // Adjacenct edges
out_edge_iterator ei, ei_end; out_edge_iterator ei, ei_end;
for (tie(ei, ei_end) = out_edges(u, g); ei != ei_end; ei++) { for (tie(ei, ei_end) = out_edges(u, g); ei != ei_end; ei++)
edge_descriptor e = *ei; std::cout << *ei << " ";
std::cout << "<" << e.first << ", " << e.second << ">" << " ";
}
std::cout << " Adjacent vertices "; std::cout << " Adjacent vertices ";
// Adjacent vertices // Adjacent vertices
// Here we want our adjacency_iterator and not boost::adjacency_iterator. // Here we want our adjacency_iterator and not boost::adjacency_iterator.
@ -497,18 +495,17 @@ int main (int argc, char const *argv[]) {
// will print: // will print:
// //
// Edges and weights // Edges and weights
// <0, 1> weight 0.5 // (0, 1) weight 0.5
// <1, 2> weight 1.5 // (1, 2) weight 1.5
// <2, 3> weight 2.5 // (2, 3) weight 2.5
// <3, 4> weight 3.5 // (3, 4) weight 3.5
// <4, 0> weight 2 // (4, 0) weight 2
// 5 edges // 5 edges
std::cout << "Edges and weights" << std::endl; std::cout << "Edges and weights" << std::endl;
edge_iterator ei, ei_end; edge_iterator ei, ei_end;
for (tie(ei, ei_end) = edges(g); ei != ei_end; ei++) { for (tie(ei, ei_end) = edges(g); ei != ei_end; ei++) {
edge_descriptor e = *ei; edge_descriptor e = *ei;
std::cout << "<" << e.first << ", " << e.second << ">" std::cout << e << " weight " << get(edge_weight, g, e) << std::endl;
<< " weight " << get(edge_weight, g, e) << std::endl;
} }
std::cout << num_edges(g) << " edges" << std::endl; std::cout << num_edges(g) << " edges" << std::endl;