# `strong_components`

    // 名前付きパラメータバージョン
    template <class Graph, class ComponentMap, class P, class T, class R>
    typename property_traits<ComponentMap>::value_type
    strong_components(Graph& g, ComponentMap comp,
        const bgl_named_params<P, T, R>& params = all defaults)

    // この関数の名前なしパラメータバージョンは存在しない

`strong_components()` 関数は有向グラフの強連結成分を DFS [41] に基づいた Tarjan の アルゴリズムを用いて計算する。

アルゴリズムの出力はコンポーネント・プロパティ・マップ `comp` に 記録される。それは各頂点に割り当てられた成分のIDを与える数を 含んでいる。成分数が関数の返却値である。

### Where Defined

`boost/graph/strong_components.hpp`

### Definitions

有向グラフの強連結成分 G=(V,E) は V中の、全ての頂点対 u と v に おいて、u から v への道と vから uへの道の両方 を持つような最大頂点集合 U である。言うなれば u と vは 互いに到達可能である。

### Parameters

IN: `const Graph& g`

> 有向グラフ。グラフの型は Vertex List Graph と Incidence Graph のモデルでなければならない。

OUT: `ComponentMap c`

> アルゴリズムはグラフ中にある連結成分数を計算し、各成分に整数のラベルを 割り当てる。アルゴリズムはそれからコンポーネント・プロパティ・マップ中の 成分番号を記録する事によって グラフ中の各頂点がどの成分に属しているかを登録する。 `ComponentMap` の型は Writable Property Map のモデルでなければならない。値型は汎整数型であるべきで、できれば グラフの `vertices_size_type` に等しい方が望ましい。キー型はグラフの 頂点記述子型でなければならない。

### Named Parameters

UTIL: `root_map(RootMap r_map)`

> これは各頂点の候補根頂点を記録するためにアルゴリズムによって 使われる。アルゴリズムの終了までに、各成分のただ一つの根頂点が 存在する。また `get(r_map, v)` は頂点 `v` がメンバである成分 のための根頂点を返す。 `RootMap` は Read/Write Property Map でなければならず、ここでキー型と値型はグラフの 頂点記述子である。
> デフォルト: サイズが `num_vertices(g)` の頂点記述子の `std::vector` から作られた `iterator_property_map` で、添え字マップには `i_map` を用いる。

UTIL: `discover_time_map(TimeMap t_map)`

> これは頂点の DFS 配列の過程を保持するためにアルゴリズムによって使われる。 `TimeMap` は Read/Write Property Map でなければならず、その値型は汎整数型でなければならない。 キー型はグラフの頂点記述子型でなければならない。
> デフォルト: サイズが `num_vertices(g)` の汎整数型の `std::vector` から作られた `iterator_property_map` で、添え字マップには `i_map` を用いる。

UTIL: `color_map(ColorMap c_map)`

> これはグラフを通る進行過程を保持するためにアルゴリズムによって使われる。 `ColorMap` 型は Read/Write Property Map のモデルでなければならず、かつキー型はグラフの頂点記述子型でなければなら ず、またカラー・マップの値型は ColorValue をモデルとしなければならない。
> デフォルト: サイズ `num_vertices(g)` の `default_color_type` の `std::vector` から作られた `iterator_property_map`で、添え字マップには `i_map` を用いる。

IN: `vertex_index_map(VertexIndexMap i_map)`

> これは各頂点を `[0, num_vertices(g))` の範囲において整数に マップする。 このパラメータは名前付きパラメータの一つにデフォルトが使われた 時にのみ必要である。 `VertexIndexMap` の型は Readable Property Map のモデルでなければならない。マップの値型は汎整数型でなければならない。 グラフの頂点記述子型はマップのキー型として使用できる必要がある。
> デフォルト: `get(vertex_index, g)`

### Complexity

時間複雑性は O(V + E) である。

### See Also

`connected_components()` and `incremental_components()`

### Example

`examples/strong_components.cpp` を見よ。

Copyright © 2000-2001 | Jeremy Siek, Indiana University (jsiek@osl.iu.edu)

Japanese Translation Copyright © 2003 Takashi Itou
オリジナルの、及びこの著作権表示が全ての複製の中に現れる限り、この文書の複製、利用、変更、販売そして配布を認める。このドキュメントは「あるがまま」に提供されており、いかなる明示的、暗黙的保証も行わない。また、いかなる目的に対しても、その利用が適していることを関知しない。

このドキュメントの対象: Boost Version 1.30.0
最新版ドキュメント (英語)