読者です 読者をやめる 読者になる 読者になる

Boost.Graph vectorを有向グラフとして使用する

C++

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 -->