edge_list<EdgeIterator, ValueType, DiffType>
edge_list クラスは辺イテレータのペアを EdgeListGraph をモデルとするクラスに変えるアダプタである。辺イテレータの value_type は std::pair (もしくは少なくとも first メンバと second メンバを持っている) でなければならない。ペアの first_type と second_type は同じでなければならず、 それらはグラフの vertex_descriptor のために使われるだろう。 ValueType と DiffType のテンプレート・パラメータは コンパイラが部分特殊化版をサポートしていない時にのみ必要である。そうでなければ デフォルトは正しい型になる。
Bellman-Ford の最短経路アルゴリズムを edge_list に適用する。
enum { u, v, x, y, z, N };
char name[] = { 'u', 'v', 'x', 'y', 'z' };
typedef std::pair<int,int> E;
E edges[] = { E(u,y), E(u,x), E(u,v),
E(v,u),
E(x,y), E(x,v),
E(y,v), E(y,z),
E(z,u), E(z,x) };
int weight[] = { -4, 8, 5,
-2,
9, -3,
7, 2,
6, 7 };
typedef boost::edge_list<E*> Graph;
Graph g(edges, edges + sizeof(edges) / sizeof(E));
std::vector<int> distance(N, std::numeric_limits<short>::max());
std::vector<int> parent(N,-1);
distance[z] = 0;
parent[z] = z;
bool r = boost::bellman_ford_shortest_paths(g, int(N), weight,
distance.begin(),
parent.begin());
if (r)
for (int i = 0; i < N; ++i)
std::cout << name[i] << ": " << distance[i]
<< " " << name[parent[i]] << std::endl;
else
std::cout << "negative cycle" << std::endl;
出力は最短経路木中の根と各頂点の親からの距離になる。
u: 2 v v: 4 x x: 7 z y: -2 u z: 0 z
| パラメータ | 説明 |
|---|---|
| EdgeIterator | value_type が頂点記述子のペアである InputIterator のモデルでなければならない。 |
| ValueType |
EdgeIterator の value_type。 デフォルト: std::iterator_traits<EdgeIterator>::value_type |
| DiffType |
EdgeIterator の difference_type。 デフォルト: std::iterator_traits<EdgeIterator>::difference_type |
| Copyright © 2000-2001 |
Jeremy Siek,
Indiana University (jsiek@osl.iu.edu) Lie-Quan Lee, Indiana University (llee@cs.indiana.edu) Andrew Lumsdaine, Indiana University (lums@osl.iu.edu) |
Japanese Translation Copyright © 2003 Takashi Itou
オリジナルの、及びこの著作権表示が全ての複製の中に現れる限り、この文書の複製、利用、変更、販売そして配布を認める。このドキュメントは「あるがまま」に提供されており、いかなる明示的、暗黙的保証も行わない。また、いかなる目的に対しても、その利用が適していることを関知しない。
このドキュメントの対象: Boost Version 1.29.0
最新版ドキュメント (英語)