Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Boost.Graph入門

5,304 views

Published on

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

Published in: Technology
  • Be the first to comment

Boost.Graph入門

  1. 1. Boost.Graph 入門 H.22/09/11 Egtra Boost.勉強会 #2
  2. 2. 自己紹介 • Egtra / 一戸優介 • Twitter: @egtra
  3. 3. お • <boost/graph/adjacency_list.hpp> 以外も少し使ったよ • Variadic Templates使っていないよ
  4. 4. グラフ • 「頂点」(vertex) と「辺」(edge) からなるデータ構造
  5. 5. グラフでないもの • 配列・線形リンクリスト – 直線(一次元) • 木(ツリー)
  6. 6. 有向グラフ・無向グラフ • 辺に向きがあるかないか
  7. 7. 頂点と辺の操作 その1 • 変数を作る – adjacency_list<> g; • 頂点の追加 – auto u = add_vertex(g); – auto v = add_vertex(g); • 辺の追加 – auto result = add_edge(u, v, g); – auto edge = result.frst;
  8. 8. 頂点と辺の操作 その2 • 辺の削除 – remove_edge(edge, g); – または remove_edge(u, v, g); • 頂点の削除 – remove_vertex(v, g); • すべて削除 – g.clear();
  9. 9. 中をたどる • auto t = vertices(g); • BOOST_FOREACH(auto e, t) { std::cout << e << std::endl; } • eはu, vと同じ型 – さらに、この例では整数型(必ずではな い)
  10. 10. Rangeです • これもコンパイル・実行可能。 • std::for_each( boost::begin(t), boost::end(t), ……); • t | pstade::oven::……
  11. 11. さらにRange (1) • 接する頂点 • auto t = adjacent_vertices(v, g) v
  12. 12. さらにRange (2) • 接する辺 • auto t = adjacent_edges(v, g) v
  13. 13. 頂点と辺の型 • 頂点 – adjacency_list<>::vertex_descriptor – またはgraph_traits<adjacency_list<>> ::vertex_descriptor • 辺 – adjacency_list<>::edge_descriptor – またはgraph_traits<adjacency_list<>> ::edge_descriptor
  14. 14. その他読み取り関数 • 辺→両端の頂点 : source, target • 両端の頂点→辺 : edge, edge_range • インデックス→頂点 : vertex • 頂点の数 : num_vertices • 辺の数 : num_edges • すべての辺 : edges
  15. 15. adjacency_list (1) • ずばり「グラフ型」(の1つ) • Boost.Graphを使い始める最大の難関 • テンプレート引数が多い – adjacency_list<OutEdgeList, VertexList, Directed, Vertex Properties, EdgeProperties, GraphProperties, EdgeList> – ドキュメント見る気がなくなる
  16. 16. adjacency_list (2) • OutEdgeList, VertexList – 頂点と辺にどんなコンテナを使うか – 挿入・削除・参照などの時間が変化 – 削除時に記述子が無効になるか否かが変化 • Directed – 有向グラフか無向グラフか • 残りのテンプレート引数 – 入門の入門では扱いません
  17. 17. 扱わなかったもの • 以下、Boost.Graphに入門したら きっと使う機会が出てくるでしょう • プロパティマップ • アルゴリズム – breadth_frst_search – depth_frst_search – Etc…… • Graphviz形式入出力
  18. 18. おさらい: グラフへの操作 • 参照 – 辺・頂点の数 – すべての辺・頂点 – ある頂点から伸びる辺 – ある辺に接する頂点(2つ) • 変更 – 頂点を加える・取り除く – 辺を加える・取り除く
  19. 19. JR最長片道切符 • とにかく遠回りして一番長い距離の 切符(のルート)を求める – – JR路線網→グラフ! – – 路線網をBoost.Graphで表現 – →総当たりする
  20. 20. 力尽きたよ…… • 北海道の路線を打ち込んだところで ギブアップ
  21. 21. ついでなんで運賃を
  22. 22. なぜBoost.Graph? • イテレータでのアクセスがある – 辺・頂点 – 一部はpair<iter, iter> – Rangeだ! • malloc/for→STL(コンテナ/アルゴリズム) – のような

×