23
Boost.Graph 入入入入入 H.22/09/11 Egtra Boost. 入入入 #2

Boost.Graph入門

  • Upload
    egtra

  • View
    3.614

  • Download
    0

Embed Size (px)

DESCRIPTION

Boost.勉強会 #2のときに使用したスライドです。

Citation preview

Page 1: Boost.Graph入門

Boost.Graph 入門の入門

H.22/09/11EgtraBoost. 勉強会 #2

Page 2: Boost.Graph入門

自己紹介

• Egtra • Twitter: @egtra

Page 3: Boost.Graph入門

お約束など

• #include <boost/graph/adjacency_list.hpp>– 残念ながらほかのヘッダの出番はありません

• using namespace boost;– 主にスペースの都合

• 注意 : C++0x の auto 使います– 主にスペースの都合

Page 4: Boost.Graph入門

グラフ

• 「頂点」 (vertex) と「辺」 (edge)からなるデータ構造

Page 5: Boost.Graph入門

グラフでないもの

• 配列・線形リンクリスト– 直線(一次元)

• 木(ツリー)

Page 6: Boost.Graph入門

有向グラフ・無向グラフ

• 辺に向きがあるかないか

Page 7: Boost.Graph入門

さっそく使ってみる

Page 8: Boost.Graph入門

頂点と辺の操作 その 1

• 変数を作る– adjacency_list<> g;

• 頂点の追加– auto u = add_vertex(g);– auto v = add_vertex(g);

• 辺の追加– auto result = add_edge(u, v, g);– auto edge = result.first;

Page 9: Boost.Graph入門

頂点と辺の操作 その 2

• 辺の削除– remove_edge(edge, g);– または remove_edge(u, v, g);

• 頂点の削除– remove_vertex(v, g);

• すべて削除– g.clear();

Page 10: Boost.Graph入門

中をたどる

• auto t = vertices(g);• BOOST_FOREACH(auto e, t)

{std::cout << e << std::endl;

}• e は u, v と同じ型

– さらに、この例では整数型(必ずではない)

Page 11: Boost.Graph入門

Range です

• これもコンパイル・実行可能。• std::for_each(

boost::begin(t),boost::end(t),……);

• t | pstade::oven::……

Page 12: Boost.Graph入門

さらに Range (1)

• 接する頂点• auto t = adjacent_vertices(v, g)

v

Page 13: Boost.Graph入門

さらに Range (2)

• 接する辺• auto t = adjacent_edges(v, g)

v

Page 14: Boost.Graph入門

おまけ残り時間の許すところまで進みます。

Page 15: Boost.Graph入門

頂点と辺の型

• 頂点– adjacency_list<>::vertex_descriptor– または

graph_traits<adjacency_list<>>::vertex_descriptor

• 辺– adjacency_list<>::edge_descriptor– または

graph_traits<adjacency_list<>>::edge_descriptor

Page 16: Boost.Graph入門

その他読み取り関数• 辺→両端の頂点 : source, target• 両端の頂点→辺 : edge,

edge_range• インデックス→頂点 : vertex

• 頂点の数 : num_vertices• 辺の数 : num_edges• すべての辺 : edges

Page 17: Boost.Graph入門

Boost.Graph に入門するまで

あと一歩

Page 18: Boost.Graph入門

adjacency_list (1)

• ずばり「グラフ型」 ( の 1 つ )• Boost.Graph を使い始める最大の難関• テンプレート引数が多い

– adjacency_list<OutEdgeList, VertexList, Directed, VertexProperties, EdgeProperties, GraphProperties, EdgeList>

– ドキュメント見る気がなくなる

Page 19: Boost.Graph入門

adjacency_list (2)• OutEdgeList, VertexList

– 頂点と辺にどんなコンテナを使うか– 挿入・削除・参照などの時間が変化– 削除時に記述子が無効になるか否かが変化

• Directed– 有向グラフか無向グラフか

• 残りのテンプレート引数– 入門の入門では扱いません

Page 20: Boost.Graph入門

扱わなかったもの

• 以下、 Boost.Graph に入門したらきっと使う機会が出てくるでしょう

• プロパティマップ• アルゴリズム

– breadth_first_search– depth_first_search– Etc……

• Graphviz 形式入出力

Page 21: Boost.Graph入門

まとめ : グラフへの操作

• 参照– 辺・頂点の数 – すべての辺・頂点– ある頂点から伸びる辺– ある辺に接する頂点 (2 つ )

• 変更– 頂点を加える・取り除く– 辺を加える・取り除く

Page 22: Boost.Graph入門
Page 23: Boost.Graph入門