Your SlideShare is downloading. ×
Boost.Graph入門
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Boost.Graph入門

3,548
views

Published on

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

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

Published in: Technology

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,548
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
14
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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