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

Boost.Graph 出辺の数を取得する

C++

num_out_edges()関数とかはないので、out_edges()で得られたRangeの要素をカウントする。

#include <iostream>
#include <boost/graph/adjacency_list.hpp>
#include <boost/range/distance.hpp>

using Graph = boost::adjacency_list<
    boost::listS,
    boost::vecS,
    boost::directedS
>;

using Edge = std::pair<int, int>;

enum {A, B, C, D, N};

int main()
{
    const std::vector<Edge> edges {
        {A, B},
        {A, C},
        {B, D},
        {C, D}
    };

    const Graph g(edges.begin(), edges.end(), N);

    const std::size_t num_out_edges = boost::distance(out_edges(A, g));
    std::cout << num_out_edges << std::endl;
}

出力:

2

追記:2014/06/06 17:54

out_degree()(出次数)を使えばいいようです。

#include <iostream>
#include <boost/graph/adjacency_list.hpp>
#include <boost/range/distance.hpp>

using Graph = boost::adjacency_list<
    boost::listS,
    boost::vecS,
    boost::directedS
>;

using Edge = std::pair<int, int>;

enum {A, B, C, D, N};

int main()
{
    const std::vector<Edge> edges {
        {A, B},
        {A, C},
        {B, D},
        {C, D}
    };

    const Graph g(edges.begin(), edges.end(), N);

    std::size_t num_out_edges = out_degree(A, g);
    std::cout << num_out_edges << std::endl;
}

出力:

2