Boost.Graphでdotファイルを読み書き

昨日に引き続き、Boost.Graphの話題。

昨日はBoost.Graphを使うということで、Graphの頂点や辺に複数のプロパティを持たせることについて書いた。

今日はBoost.Graphのプロパティをファイルから読み込む方法。ここで、グラフを保持するファイルはGraphvizのdot形式とする。

dot形式は例えば

digraph G{
1 [label="A"];
2 [label="B"];
1->2 [weight=10];
}

のような形とする。
このファイルをBoost.Graphの形式で読み込むには、 #include を利用して、

//グラフの宣言
Graph g;
 
//グラフのプロパティ設定
boost::dynamic_properties dp(boost::ignore_other_properties);
dp.property("id",boost::get(boost::vertex_id,g)); // 自前で定義したvertex_idの型
dp.property("label",boost::get(boost::vertex_name,g));
dp.property("weight",boost::get(boost::edge_weight,g));
 
//グラフを読み込み
boost::read_graphviz(file, g, dp, "id");

これにより、グラフ中の1,2といった頂点の識別子をidとして、dotファイル中のlabelをlabelとして、weightをweightとして読み込むことができる。