のんびりしているエンジニアの日記

ソフトウェアなどのエンジニア的な何かを書きます。

Boost Graph(1) グラフの表示をしてみましょう!

Sponsored Links

皆さんこんにちは
お元気ですか。私は元気です。

さて、今日はBoost Graphについて解説したいと思います。
このグラフはあれですよ、ほら有向グラフとかのグラフで折れ線グラフとかではありません。

グラフを構築する

#include <fstream>
#include <vector>
#include <string>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graphviz.hpp>

using namespace std;

typedef
    boost::adjacency_list<boost::listS, boost::vecS, boost::directedS,
        boost::no_property, boost::property<boost::edge_weight_t, int> >
Graph;

typedef pair<int, int> Edge;

enum { Tokyo, Osaka, Yokohama, Fukuoka, Hokkaido, N };
const string name = "ABCDE";

int main()
{
    //初期化
    vector<Edge> edges;
    edges.push_back(make_pair(Tokyo,Osaka));
    edges.push_back(make_pair(Tokyo, Yokohama));
    edges.push_back(make_pair(Tokyo, Fukuoka));
    edges.push_back(make_pair(Osaka, Hokkaido));
    edges.push_back(make_pair(Yokohama, Hokkaido));
    edges.push_back(make_pair(Fukuoka, Hokkaido));

    //初期化
    vector<int> weights;
    weights.push_back(3); weights.push_back(1);
    weights.push_back(4); weights.push_back(5);
    weights.push_back(2); weights.push_back(6);

    //エッジ、重み、重みの数を入れる。
    Graph g(edges.begin(), edges.end(), weights.begin(), N);

    // graphvizとして出力
    ofstream file("test.dot");
    boost::write_graphviz(file, g, boost::make_label_writer(name.c_str()));
}

f:id:tereka:20140719181750p:plain

graphvizを利用すると出力することができます。
他にも色々とアルゴリズムを実行できますが、之以降は長くなるので別記事にて…。