Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_34_1/libs/graph/doc/strong_components.html @ 30

Last change on this file since 30 was 29, checked in by landauf, 17 years ago

updated boost from 1_33_1 to 1_34_1

File size: 6.9 KB
Line 
1<HTML>
2<!--
3  -- Copyright (c) Jeremy Siek 2000
4  --
5  -- Distributed under the Boost Software License, Version 1.0.
6  -- (See accompanying file LICENSE_1_0.txt or copy at
7  -- http://www.boost.org/LICENSE_1_0.txt)
8  -->
9<Head>
10<Title>Boost Graph Library: Strongly Connected Components</Title>
11<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b" 
12        ALINK="#ff0000"> 
13<IMG SRC="../../../boost.png" 
14     ALT="C++ Boost" width="277" height="86"> 
15
16<BR Clear>
17
18
19<H1>
20<A NAME="sec:connected-components"></A><A NAME="sec:strongly-connected-components"></A>
21<img src="figs/python.gif" alt="(Python)"/>
22<TT>strong_components</TT>
23</H1>
24
25<PRE>
26<i>// named parameter version</i>
27template &lt;class Graph, class ComponentMap, class P, class T, class R&gt;
28typename property_traits&lt;ComponentMap&gt;::value_type
29strong_components(Graph& g, ComponentMap comp,
30    const bgl_named_params&lt;P, T, R&gt;&amp; params = <i>all defaults</i>)
31
32<i>// there is not a non-named parameter version of this function</i>
33</PRE>
34
35<P>
36The <TT>strong_components()</TT> functions compute the strongly
37connected components of a directed graph using Tarjan's algorithm
38based on DFS&nbsp;[<A
39HREF="bibliography.html#tarjan72:dfs_and_linear_algo">41</A>].
40</p>
41
42<P>
43The output of the algorithm is recorded in the component property
44map <TT>comp</TT>, which will contain numbers giving the component ID
45assigned to each vertex. The number of components is the return value
46of the function.
47</p>
48
49<H3>Where Defined</H3>
50
51<P>
52<a href="../../../boost/graph/strong_components.hpp"><TT>boost/graph/strong_components.hpp</TT></a>
53
54<P>
55
56<H3>Definitions</H3>
57
58<P>
59A <a name="def:strongly-connected-component"><b><I>strongly connected
60component</I></b></a> of a directed graph <i>G=(V,E)</i> is a maximal
61set of vertices <i>U</i> which is in <i>V</i> such that for every pair
62of vertices <i>u</i> and <i>v</i> in <i>U</i>, we have both a path
63from <i>u</i> to <i>v</i> and path from <i>v</i> to <i>u</i>. That is
64to say that <i>u</i> and <i>v</i> are reachable from each other.
65
66<P>
67
68<h3>Parameters</h3>
69
70IN: <tt>const Graph&amp; g</tt>
71<blockquote>
72A directed graph. The graph type must be a model of <a
73href="VertexListGraph.html">Vertex List Graph</a> and <a
74href="IncidenceGraph.html">Incidence Graph</a>.<br>
75
76<b>Python</b>: The parameter is named <tt>graph</tt>.
77</blockquote>
78
79OUT: <tt>ComponentMap c</tt>
80<blockquote>
81The algorithm computes how many connected components are in the graph,
82and assigning each component an integer label. The algorithm then
83records which component each vertex in the graph belongs to by
84recording the component number in the component property map. The
85<tt>ComponentMap</tt> type must be a model of <a
86href="../../property_map/WritablePropertyMap.html">Writable Property
87Map</a>. The value type shouch be an integer type, preferably the same
88as the <tt>vertices_size_type</tt> of the graph. The key type must be
89the graph's vertex descriptor type.<br>
90
91  <b>Python</b>: Must be an <tt>vertex_int_map</tt> for the graph.<br>
92  <b>Python default</b>: <tt>graph.get_vertex_int_map("component")</tt>
93</blockquote>
94
95
96<h3>Named Parameters</h3>
97
98UTIL: <tt>root_map(RootMap r_map)</tt>
99<blockquote>
100  This is used by the algorithm to record the candidate root vertex for
101  each vertex. By the end of the algorithm, there is a single root vertex
102  for each component and <tt>get(r_map, v)</tt> returns the root
103  vertex for whichever component vertex <tt>v</tt> is a member.
104  The <TT>RootMap</TT> must be a <a
105  href="../../property_map/ReadWritePropertyMap.html">
106  Read/Write Property Map</a>, where the key type and the value type are
107  the vertex descriptor type of the graph.<br>
108
109  <b>Default:</b> an <a
110  href="../../property_map/iterator_property_map.html">
111  <tt>iterator_property_map</tt></a> created from a
112  <tt>std::vector</tt> of vertex descriptors of size
113  <tt>num_vertices(g)</tt> and using the <tt>i_map</tt> for the index
114  map.<br>
115  <b>Python</b>: Unsupported parameter.
116</blockquote>
117
118UTIL: <tt>discover_time_map(TimeMap t_map)</tt>
119<blockquote>
120  This is used by the algorithm to keep track of the DFS ordering
121  of the vertices. The <TT>TimeMap</TT> must be a model
122  of <a href="../../property_map/ReadWritePropertyMap.html"> Read/Write
123  Property Map</a> and its value type must be an integer type. The key
124  type must be the vertex descriptor type of the graph.<br>
125  <b>Default:</b>an <a
126  href="../../property_map/iterator_property_map.html">
127  <tt>iterator_property_map</tt></a> created from a
128  <tt>std::vector</tt> of integers with size
129  <tt>num_vertices(g)</tt> and using the <tt>i_map</tt> for the index
130  map.<br>
131  <b>Python</b>: Unsupported parameter.
132</blockquote>
133
134UTIL: <tt>color_map(ColorMap c_map)</tt>
135<blockquote>
136  This is used by the algorithm to keep track of its progress through
137  the graph. The type <tt>ColorMap</tt> must be a model of <a
138  href="../../property_map/ReadWritePropertyMap.html">Read/Write
139  Property Map</a> and its key type must be the graph's vertex
140  descriptor type and the value type of the color map must model
141  <a href="./ColorValue.html">ColorValue</a>.<br>
142  <b>Default:</b> an <a
143  href="../../property_map/iterator_property_map.html">
144  <tt>iterator_property_map</tt></a> created from a
145  <tt>std::vector</tt> of <tt>default_color_type</tt> of size
146  <tt>num_vertices(g)</tt> and using the <tt>i_map</tt> for the index
147  map.<br>
148  <b>Python</b>: Unsupported parameter.
149</blockquote>
150
151IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt>
152<blockquote>
153  This maps each vertex to an integer in the range <tt>[0,
154  num_vertices(g))</tt>. This parameter is only necessary when a
155  default is used for one of the other named parameters. The type
156  <tt>VertexIndexMap</tt> must be a model of <a
157  href="../../property_map/ReadablePropertyMap.html">Readable Property
158  Map</a>. The value type of the map must be an integer type. The
159  vertex descriptor type of the graph needs to be usable as the key
160  type of the map.<br>
161
162  <b>Default:</b> <tt>get(vertex_index, g)</tt>
163    Note: if you use this default, make sure your graph has
164    an internal <tt>vertex_index</tt> property. For example,
165    <tt>adjacenty_list</tt> with <tt>VertexList=listS</tt> does
166    not have an internal <tt>vertex_index</tt> property.
167   <br>
168
169  <b>Python</b>: Unsupported parameter.
170</blockquote>
171
172
173<H3>Complexity</H3>
174
175<P>
176The time complexity for the strongly connected components algorithm is
177<i>O(V + E)</i>.
178
179<P>
180
181<h3>See Also</h3>
182
183<a href="./connected_components.html"><tt>connected_components()</tt></a>
184and <a href="./incremental_components.html"><tt>incremental_components()</tt></a>
185
186<H3>Example</H3>
187
188<P>
189See <a
190href="../example/strong_components.cpp"><tt>examples/strong_components.cpp</tt></a>.
191
192<br>
193<HR>
194<TABLE>
195<TR valign=top>
196<TD nowrap>Copyright &copy 2000-2001</TD><TD>
197<A HREF="../../../people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</A>)
198</TD></TR></TABLE>
199
200</BODY>
201</HTML> 
Note: See TracBrowser for help on using the repository browser.