Boost.Graphには、
これをインクルードするとstd::vectorを有向グラフとして使用できるようになります。
以下、使用例です。
#include <iostream> #include <vector> #include <list> #include <string> #include <boost/graph/vector_as_graph.hpp> #include <boost/graph/graph_utility.hpp> #include <boost/graph/adjacency_list.hpp> #include <boost/assign/list_of.hpp> enum { A, B, C, D, E, N }; const std::string name = "ABCDE"; int main() { // vectorを有向グラフとして使用する { std::vector<std::list<int>> g(N); g[A].push_back(B); g[B].push_back(E); g[A].push_back(C); g[C].push_back(E); boost::print_graph(g, name.data()); } std::cout << std::endl; // 同じことをadjacency_listでやる場合 { typedef boost::adjacency_list<boost::listS, boost::vecS, boost::directedS> Graph; typedef std::pair<int, int> Edge; const std::vector<Edge> edges = boost::assign::list_of<Edge> (A, B)(B, E) (A, C)(C, E) ; const Graph g(edges.begin(), edges.end(), N); boost::print_graph(g, name.data()); } }
A --> B C B --> E C --> E D --> E --> A --> B C B --> E C --> E D --> E -->