Difference between revisions of "Boost/BGL/CopyAGraph"
From ProgrammingExamples
Daviddoria (Talk | contribs) (Created page with '==CopyAGraph.cpp== <source lang="cpp"> // http://www.boost.org/doc/libs/1_37_0/libs/graph/doc/read_graphviz.html #include <iostream> #include <string> #include <fstream> #includ…') |
(No difference)
|
Revision as of 13:21, 27 June 2011
CopyAGraph.cpp
// http://www.boost.org/doc/libs/1_37_0/libs/graph/doc/read_graphviz.html #include <iostream> #include <string> #include <fstream> #include <boost/graph/adjacency_list.hpp> #include <boost/graph/graphviz.hpp> // We need a bool to store visibility of each edge struct EdgeVisibility { bool visible; }; typedef boost::adjacency_list < boost::vecS, boost::vecS, boost::undirectedS, boost::no_property, EdgeVisibility> Graph; Graph CreateGraph(); void Test(const Graph g); int main(int argc, char*argv[]) { Graph g = CreateGraph(); Test(g); return 0; } void Test(const Graph inputGraph) { Graph g = inputGraph; // Iterate over the edges, setting the 10th one to invisible unsigned int counter = 0; std::pair<Graph::edge_iterator, Graph::edge_iterator> edgeIteratorRange = boost::edges(g); for(Graph::edge_iterator edgeIterator = edgeIteratorRange.first; edgeIterator != edgeIteratorRange.second; ++edgeIterator) { if(counter == 10) { g[*edgeIterator].visible = false; } counter++; } // Output the visibility of the edges. This one works properly: { std::pair<Graph::edge_iterator, Graph::edge_iterator> edgeIteratorRange = boost::edges(g); // Note this is the new graph for(Graph::edge_iterator edgeIterator = edgeIteratorRange.first; edgeIterator != edgeIteratorRange.second; ++edgeIterator) { std::cout << g[*edgeIterator].visible << " "; } std::cout << std::endl; } // Output the visibility of the edges. This one always says all of the edges are visible { std::pair<Graph::edge_iterator, Graph::edge_iterator> edgeIteratorRange = boost::edges(inputGraph); // Note this is the original graph for(Graph::edge_iterator edgeIterator = edgeIteratorRange.first; edgeIterator != edgeIteratorRange.second; ++edgeIterator) { std::cout << g[*edgeIterator].visible << " "; } std::cout << std::endl; } } Graph CreateGraph() { Graph g(19); boost::add_edge(0,1,g); boost::add_edge(1,2,g); boost::add_edge(2,3,g); boost::add_edge(3,4,g); boost::add_edge(4,5,g); boost::add_edge(5,6,g); boost::add_edge(6,7,g); boost::add_edge(7,8,g); boost::add_edge(7,9,g); boost::add_edge(9,10,g); boost::add_edge(7,11,g); boost::add_edge(11,12,g); boost::add_edge(12,13,g); boost::add_edge(13,14,g); boost::add_edge(13,15,g); boost::add_edge(15,16,g); boost::add_edge(16,17,g); boost::add_edge(17,18,g); // Set all edges to visible std::pair<Graph::edge_iterator, Graph::edge_iterator> edgeIteratorRange = boost::edges(g); for(Graph::edge_iterator edgeIterator = edgeIteratorRange.first; edgeIterator != edgeIteratorRange.second; ++edgeIterator) { g[*edgeIterator].visible = true; } return g; }
CMakeLists.txt
cmake_minimum_required(VERSION 2.6) Project(CopyAGraph) set(Boost_USE_MULTITHREADED ON) FIND_PACKAGE(Boost 1.38 COMPONENTS required) INCLUDE_DIRECTORIES(${INCLUDE_DIRECTORIES} ${Boost_INCLUDE_DIRS}) LINK_DIRECTORIES(${LINK_DIRECTORIES} ${Boost_LIBRARY_DIRS}) ADD_EXECUTABLE(CopyAGraph CopyAGraph.cpp) target_link_libraries(CopyAGraph boost_graph)