<ahref="graph_8h.html">Go to the documentation of this file.</a><divclass="fragment"><divclass="line"><aname="l00001"></a><spanclass="lineno"> 1</span> <spanclass="comment">// Copyright 2010-2018 Google LLC</span></div><divclass="line"><aname="l00002"></a><spanclass="lineno"> 2</span> <spanclass="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></div><divclass="line"><aname="l00003"></a><spanclass="lineno"> 3</span> <spanclass="comment">// you may not use this file except in compliance with the License.</span></div><divclass="line"><aname="l00004"></a><spanclass="lineno"> 4</span> <spanclass="comment">// You may obtain a copy of the License at</span></div><divclass="line"><aname="l00005"></a><spanclass="lineno"> 5</span> <spanclass="comment">//</span></div><divclass="line"><aname="l00006"></a><spanclass="lineno"> 6</span> <spanclass="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></div><divclass="line"><aname="l00007"></a><spanclass="lineno"> 7</span> <spanclass="comment">//</span></div><divclass="line"><aname="l00008"></a><spanclass="lineno"> 8</span> <spanclass="comment">// Unless required by applicable law or agreed to in writing, software</span></div><divclass="line"><aname="l00009"></a><spanclass="lineno"> 9</span> <spanclass="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></div><divclass="line"><aname="l00010"></a><spanclass="lineno"> 10</span> <spanclass="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><divclass="line"><aname="l00011"></a><spanclass="lineno"> 11</span> <spanclass="comment">// See the License for the specific language governing permissions and</span></div><divclass="line"><aname="l00012"></a><spanclass="lineno"> 12</span> <spanclass="comment">// limitations under the License.</span></div><divclass="line"><aname="l00013"></a><spanclass="lineno"> 13</span> </div><divclass="line"><aname="l00014"></a><spanclass="lineno"> 14</span> <spanclass="comment">//</span></div><divclass="line"><aname="l00015"></a><spanclass="lineno"> 15</span> <spanclass="comment">//</span></div><divclass="line"><aname="l00016"></a><spanclass="lineno"> 16</span> <spanclass="comment">// This file defines a generic graph interface on which most algorithms can be</span></div><divclass="line"><aname="l00017"></a><spanclass="lineno"> 17</span> <spanclass="comment">// built and provides a few efficient implementations with a fast construction</span></div><divclass="line"><aname="l00018"></a><spanclass="lineno"> 18</span> <spanclass="comment">// time. Its design is based on the experience acquired by the Operations</span></div><divclass="line"><aname="l00019"></a><spanclass="lineno"> 19</span> <spanclass="comment">// Research team in their various graph algorithm implementations.</span></div><divclass="line"><aname="l00020"></a><spanclass="lineno"> 20</span> <spanclass="comment">//</span></div><divclass="line"><aname="l00021"></a><spanclass="lineno"> 21</span> <spanclass="comment">// The main ideas are:</span></div><divclass="line"><aname="l00022"></a><spanclass="lineno"> 22</span> <spanclass="comment">// - Graph nodes and arcs are represented by integers.</span></div><divclass="line"><aname="l00023"></a><spanclass="lineno"> 23</span> <spanclass="comment">// - Node or arc annotations (weight, cost, ...) are not part of the graph</span></div><divclass="line"><aname="l00024"></a><spanclass="lineno"> 24</span> <spanclass="comment">// class, they can be stored outside in one or more arrays and can be easily</span></div><divclass="line"><aname="l00025"></a><spanclass="lineno"> 25</span> <spanclass="comment">// retrieved using a node or arc as an index.</span></div><divclass="line"><aname="l00026"></a>
<divclass="ttc"id="classutil_1_1SVector_html_afc485e5858e15ce8ec376ca7640ede1e"><divclass="ttname"><ahref="classutil_1_1SVector.html#afc485e5858e15ce8ec376ca7640ede1e">util::SVector::operator=</a></div><divclass="ttdeci">SVector & operator=(const SVector &other)</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l00780">graph.h:780</a></div></div>
<divclass="ttc"id="classutil_1_1CompleteGraph_html_ad3401c3d9df9b08cd9be279464029a32"><divclass="ttname"><ahref="classutil_1_1CompleteGraph.html#ad3401c3d9df9b08cd9be279464029a32">util::CompleteGraph::CompleteGraph</a></div><divclass="ttdeci">CompleteGraph(NodeIndexType num_nodes)</div><divclass="ttdoc">Builds a complete graph with num_nodes nodes.</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l02184">graph.h:2184</a></div></div>
<divclass="ttc"id="classutil_1_1BaseGraph_html_ac47030fcb75a3220f8cf9ed79697056e"><divclass="ttname"><ahref="classutil_1_1BaseGraph.html#ac47030fcb75a3220f8cf9ed79697056e">util::BaseGraph::ComputeCumulativeSum</a></div><divclass="ttdeci">void ComputeCumulativeSum(std::vector< ArcIndexType > *v)</div><divclass="ttdoc">Functions commented when defined because they are implementation details.</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l00978">graph.h:978</a></div></div>
<divclass="ttc"id="classutil_1_1BaseGraph_html_ab1292c82a3f43be3bd57b63a05fe0214"><divclass="ttname"><ahref="classutil_1_1BaseGraph.html#ab1292c82a3f43be3bd57b63a05fe0214">util::BaseGraph::kNilNode</a></div><divclass="ttdeci">static const NodeIndexType kNilNode</div><divclass="ttdoc">Constants that will never be a valid node or arc.</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l00258">graph.h:258</a></div></div>
<divclass="ttc"id="classutil_1_1ReverseArcStaticGraph_html_a0ff94f595442b19c2de253a2685fe27f"><divclass="ttname"><ahref="classutil_1_1ReverseArcStaticGraph.html#a0ff94f595442b19c2de253a2685fe27f">util::ReverseArcStaticGraph::operator[]</a></div><divclass="ttdeci">BeginEndWrapper< NodeIndexType const * > operator[](NodeIndexType node) const</div><divclass="ttdoc">This loops over the heads of the OutgoingArcs(node).</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l01699">graph.h:1699</a></div></div>
<divclass="ttc"id="classutil_1_1SVector_html_acee1cc8d243acbdad8d30f97c5d54a5f"><divclass="ttname"><ahref="classutil_1_1SVector.html#acee1cc8d243acbdad8d30f97c5d54a5f">util::SVector::swap</a></div><divclass="ttdeci">void swap(SVector< T >&x)</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l00844">graph.h:844</a></div></div>
<divclass="ttc"id="namespaceutil_html"><divclass="ttname"><ahref="namespaceutil.html">util</a></div><divclass="ttdoc">Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in c...</div><divclass="ttdef"><b>Definition:</b><ahref="connected__components_8h_source.html#l00056">connected_components.h:56</a></div></div>
<divclass="ttc"id="classutil_1_1SVector_html_a9e1927755201f418ac04ac1ad4b4660d"><divclass="ttname"><ahref="classutil_1_1SVector.html#a9e1927755201f418ac04ac1ad4b4660d">util::SVector::operator=</a></div><divclass="ttdeci">SVector & operator=(SVector &&other)</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l00802">graph.h:802</a></div></div>
<divclass="ttc"id="classutil_1_1SVector_html_ac34dbebcbd795b04b51dbfd96292d671"><divclass="ttname"><ahref="classutil_1_1SVector.html#ac34dbebcbd795b04b51dbfd96292d671">util::SVector::grow</a></div><divclass="ttdeci">void grow(const T &left=T(), const T &right=T())</div><divclass="ttdoc">NOTE(user): This doesn't currently support movable-only objects, but we could fix that.</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l00873">graph.h:873</a></div></div>
<divclass="ttc"id="classutil_1_1BaseGraph_html_aa3bd051d1e141b09dda17aa9b5f24f69"><divclass="ttname"><ahref="classutil_1_1BaseGraph.html#aa3bd051d1e141b09dda17aa9b5f24f69">util::BaseGraph::FreezeCapacities</a></div><divclass="ttdeci">void FreezeCapacities()</div><divclass="ttdoc">FreezeCapacities() makes any future attempt to change the graph capacities crash in DEBUG mode.</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l00966">graph.h:966</a></div></div>
<divclass="ttc"id="classutil_1_1ReverseArcListGraph_html"><divclass="ttname"><ahref="classutil_1_1ReverseArcListGraph.html">util::ReverseArcListGraph</a></div><divclass="ttdoc">Extends the ListGraph by also storing the reverse arcs.</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l00459">graph.h:459</a></div></div>
<divclass="ttc"id="classutil_1_1ListGraph_html_a184d6ce1a3d943810039ac9b97b860ef"><divclass="ttname"><ahref="classutil_1_1ListGraph.html#a184d6ce1a3d943810039ac9b97b860ef">util::ListGraph::ListGraph</a></div><divclass="ttdeci">ListGraph(NodeIndexType num_nodes, ArcIndexType arc_capacity)</div><divclass="ttdoc">Reserve space for the graph at construction and do not allow it to grow beyond that,...</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l00312">graph.h:312</a></div></div>
<divclass="ttc"id="namespaceutil_html_ae76339cb2dcd3bc05ad762146f91fdda"><divclass="ttname"><ahref="namespaceutil.html#ae76339cb2dcd3bc05ad762146f91fdda">util::Graph</a></div><divclass="ttdeci">ListGraph Graph</div><divclass="ttdoc">Defining the simplest Graph interface as Graph for convenience.</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l02358">graph.h:2358</a></div></div>
<divclass="ttc"id="classutil_1_1ReverseArcMixedGraph_html_aff7c6ef395dfc941edac13b29e154b54"><divclass="ttname"><ahref="classutil_1_1ReverseArcMixedGraph.html#aff7c6ef395dfc941edac13b29e154b54">util::ReverseArcMixedGraph::operator[]</a></div><divclass="ttdeci">BeginEndWrapper< NodeIndexType const * > operator[](NodeIndexType node) const</div><divclass="ttdoc">This loops over the heads of the OutgoingArcs(node).</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l01958">graph.h:1958</a></div></div>
<divclass="ttc"id="classutil_1_1ReverseArcStaticGraph_html"><divclass="ttname"><ahref="classutil_1_1ReverseArcStaticGraph.html">util::ReverseArcStaticGraph</a></div><divclass="ttdoc">StaticGraph with reverse arc.</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l00547">graph.h:547</a></div></div>
<divclass="ttc"id="classutil_1_1ListGraph_html_a777ff917f03a31da77f275d536578afa"><divclass="ttname"><ahref="classutil_1_1ListGraph.html#a777ff917f03a31da77f275d536578afa">util::ListGraph::Build</a></div><divclass="ttdeci">void Build()</div><divclass="ttdoc">Some graph implementations need to be finalized with Build() before they can be used.</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l00339">graph.h:339</a></div></div>
<divclass="ttc"id="classutil_1_1BaseGraph_html_a0f551c921fa0b5aaa334a6e36f61db4a"><divclass="ttname"><ahref="classutil_1_1BaseGraph.html#a0f551c921fa0b5aaa334a6e36f61db4a">util::BaseGraph::num_nodes</a></div><divclass="ttdeci">NodeIndexType num_nodes() const</div><divclass="ttdoc">Returns the number of valid nodes in the graph.</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l00201">graph.h:201</a></div></div>
<divclass="ttc"id="classutil_1_1ListGraph_html_aba03f198f690155bca2ab23b039cea54"><divclass="ttname"><ahref="classutil_1_1ListGraph.html#aba03f198f690155bca2ab23b039cea54">util::ListGraph::Tail</a></div><divclass="ttdeci">NodeIndexType Tail(ArcIndexType arc) const</div><divclass="ttdoc">Returns the tail/head of a valid arc.</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l01107">graph.h:1107</a></div></div>
<divclass="ttc"id="classutil_1_1CompleteBipartiteGraph_html"><divclass="ttname"><ahref="classutil_1_1CompleteBipartiteGraph.html">util::CompleteBipartiteGraph</a></div><divclass="ttdoc">CompleteBipartiteGraph implementation ------------------------------------— Nodes and arcs are implic...</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l02251">graph.h:2251</a></div></div>
<divclass="ttc"id="classutil_1_1ReverseArcListGraph_html_ac8923133838003d7a7ffb4500f0d4ffa"><divclass="ttname"><ahref="classutil_1_1ReverseArcListGraph.html#ac8923133838003d7a7ffb4500f0d4ffa">util::ReverseArcListGraph::OutgoingArcs</a></div><divclass="ttdeci">BeginEndWrapper< OutgoingArcIterator > OutgoingArcs(NodeIndexType node) const</div><divclass="ttdoc">Arc iterations functions over the arcs touching a node (see the top-level comment for the different t...</div></div>
<divclass="ttc"id="classutil_1_1CompleteBipartiteGraph_html_a63dffe1efb9b218697c5658752d2f557"><divclass="ttname"><ahref="classutil_1_1CompleteBipartiteGraph.html#a63dffe1efb9b218697c5658752d2f557">util::CompleteBipartiteGraph::CompleteBipartiteGraph</a></div><divclass="ttdeci">CompleteBipartiteGraph(NodeIndexType left_nodes, NodeIndexType right_nodes)</div><divclass="ttdoc">Builds a complete bipartite graph from a set of left nodes to a set of right nodes.</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l02265">graph.h:2265</a></div></div>
<divclass="ttc"id="classutil_1_1BaseGraph_html_a2097ccda3b1ad27e2c82166979018bda"><divclass="ttname"><ahref="classutil_1_1BaseGraph.html#a2097ccda3b1ad27e2c82166979018bda">util::BaseGraph::IsArcValid</a></div><divclass="ttdeci">bool IsArcValid(ArcIndexType arc) const</div><divclass="ttdoc">Returns true if the given arc is a valid arc of the graph.</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l00219">graph.h:219</a></div></div>
<divclass="ttc"id="classutil_1_1SVector_html_a6270e7d8614fca867c7f935b7a3e9cd3"><divclass="ttname"><ahref="classutil_1_1SVector.html#a6270e7d8614fca867c7f935b7a3e9cd3">util::SVector::operator[]</a></div><divclass="ttdeci">T & operator[](int n)</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l00811">graph.h:811</a></div></div>
<divclass="ttc"id="classutil_1_1ListGraph_html_a6af38e88610400b54e8f28ab6f880908"><divclass="ttname"><ahref="classutil_1_1ListGraph.html#a6af38e88610400b54e8f28ab6f880908">util::ListGraph::AddNode</a></div><divclass="ttdeci">void AddNode(NodeIndexType node)</div><divclass="ttdoc">If node is not a valid node, sets num_nodes_ to node + 1 so that the given node becomes valid.</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l01129">graph.h:1129</a></div></div>
<divclass="ttc"id="namespaceutil_html_a9470623ca7db3c4a62ce3b326c6b07d8"><divclass="ttname"><ahref="namespaceutil.html#a9470623ca7db3c4a62ce3b326c6b07d8">util::PermuteWithExplicitElementType</a></div><divclass="ttdeci">void PermuteWithExplicitElementType(const IntVector &permutation, Array *array_to_permute, ElementType unused)</div><divclass="ttdoc">Permutes the elements of array_to_permute: element #i will be moved to position permutation[i].</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l00724">graph.h:724</a></div></div>
<divclass="ttc"id="namespaceutil_html_aadd7603ae6e78cc2490ca9710fbaf180"><divclass="ttname"><ahref="namespaceutil.html#aadd7603ae6e78cc2490ca9710fbaf180">util::false</a></div><divclass="ttdeci">false</div><divclass="ttdoc">This is useful for wrapping iterators of a class that support many different iterations.</div><divclass="ttdef"><b>Definition:</b><ahref="iterators_8h_source.html#l00030">iterators.h:30</a></div></div>
<divclass="ttc"id="classutil_1_1StaticGraph_html"><divclass="ttname"><ahref="classutil_1_1StaticGraph.html">util::StaticGraph</a></div><divclass="ttdoc">Most efficient implementation of a graph without reverse arcs:</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l00396">graph.h:396</a></div></div>
<divclass="ttc"id="classutil_1_1BaseGraph_html_a63fd586eed6c345866317e2f0faf377e"><divclass="ttname"><ahref="classutil_1_1BaseGraph.html#a63fd586eed6c345866317e2f0faf377e">util::BaseGraph::BuildStartAndForwardHead</a></div><divclass="ttdeci">void BuildStartAndForwardHead(SVector< NodeIndexType > *head, std::vector< ArcIndexType > *start, std::vector< ArcIndexType > *permutation)</div><divclass="ttdoc">Given the tail of arc #i in (*head)[i] and the head of arc #i in (*head)[~i].</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l00995">graph.h:995</a></div></div>
<divclass="ttc"id="classutil_1_1ReverseArcListGraph_html_ae7734e3c4b1930b2859b4813bf6e238b"><divclass="ttname"><ahref="classutil_1_1ReverseArcListGraph.html#ae7734e3c4b1930b2859b4813bf6e238b">util::ReverseArcListGraph::ReserveNodes</a></div><divclass="ttdeci">void ReserveNodes(NodeIndexType bound) override</div><divclass="ttdoc">Changes the graph capacities.</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l01476">graph.h:1476</a></div></div>
<divclass="ttc"id="classutil_1_1ListGraph_html_ab63770fa993b9347586d2852b841bdc2"><divclass="ttname"><ahref="classutil_1_1ListGraph.html#ab63770fa993b9347586d2852b841bdc2">util::ListGraph::OutgoingArcs</a></div><divclass="ttdeci">BeginEndWrapper< OutgoingArcIterator > OutgoingArcs(NodeIndexType node) const</div><divclass="ttdoc">Allows to iterate over the forward arcs that verify Tail(arc) == node.</div></div>
<divclass="ttc"id="classutil_1_1ListGraph_html_ac1aa8c7591bb033a49bab79c21c9f496"><divclass="ttname"><ahref="classutil_1_1ListGraph.html#ac1aa8c7591bb033a49bab79c21c9f496">util::ListGraph::AddArc</a></div><divclass="ttdeci">ArcIndexType AddArc(NodeIndexType tail, NodeIndexType head)</div><divclass="ttdoc">Adds an arc to the graph and returns its current index which will always be num_arcs() - 1.</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l01137">graph.h:1137</a></div></div>
<divclass="ttc"id="classutil_1_1BaseGraph_html_a92ffd852b2ab2e5241f9832e71a2de71"><divclass="ttname"><ahref="classutil_1_1BaseGraph.html#a92ffd852b2ab2e5241f9832e71a2de71">util::BaseGraph::arc_capacity</a></div><divclass="ttdeci">ArcIndexType arc_capacity() const</div><divclass="ttdoc">Capacity reserved for future arcs, always >= num_arcs_.</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l00959">graph.h:959</a></div></div>
<divclass="ttc"id="classutil_1_1ReverseArcListGraph_html_a28d6f97b2135e9d51bad632c2556fa56"><divclass="ttname"><ahref="classutil_1_1ReverseArcListGraph.html#a28d6f97b2135e9d51bad632c2556fa56">util::ReverseArcListGraph::operator[]</a></div><divclass="ttdeci">BeginEndWrapper< OutgoingHeadIterator > operator[](NodeIndexType node) const</div><divclass="ttdoc">This loops over the heads of the OutgoingArcs(node).</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l01432">graph.h:1432</a></div></div>
<divclass="ttc"id="classutil_1_1ReverseArcStaticGraph_html_aa9ec825f0a93d13a5c93e82b42cc1088"><divclass="ttname"><ahref="classutil_1_1ReverseArcStaticGraph.html#aa9ec825f0a93d13a5c93e82b42cc1088">util::ReverseArcStaticGraph::OutDegree</a></div><divclass="ttdeci">ArcIndexType OutDegree(NodeIndexType node) const</div><divclass="ttdoc">ReverseArcStaticGraph<>::OutDegree() and ::InDegree() work in O(1).</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l01686">graph.h:1686</a></div></div>
<divclass="ttc"id="classutil_1_1BaseGraph_html_abf853acea86e01356f53055f77661770"><divclass="ttname"><ahref="classutil_1_1BaseGraph.html#abf853acea86e01356f53055f77661770">util::BaseGraph::IsNodeValid</a></div><divclass="ttdeci">bool IsNodeValid(NodeIndexType node) const</div><divclass="ttdoc">Returns true if the given node is a valid node of the graph.</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l00213">graph.h:213</a></div></div>
<divclass="ttc"id="classutil_1_1BaseGraph_html_aefb468e4d4a3128c91b3bad9f5b314c8"><divclass="ttname"><ahref="classutil_1_1BaseGraph.html#aefb468e4d4a3128c91b3bad9f5b314c8">util::BaseGraph::num_arcs</a></div><divclass="ttdeci">ArcIndexType num_arcs() const</div><divclass="ttdoc">Returns the number of valid arcs in the graph.</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l00204">graph.h:204</a></div></div>
<divclass="ttc"id="graph_8h_html_aa560f5e55268f818d5e5f43ed31e19a0"><divclass="ttname"><ahref="graph_8h.html#aa560f5e55268f818d5e5f43ed31e19a0">DEFINE_STL_ITERATOR_FUNCTIONS</a></div><divclass="ttdeci">#define DEFINE_STL_ITERATOR_FUNCTIONS(iterator_class_name)</div><divclass="ttdoc">Adapt our old iteration style to support range-based for loops.</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l01077">graph.h:1077</a></div></div>
<divclass="ttc"id="classutil_1_1ListGraph_html_a1565480b94bf179067e81d762916ed52"><divclass="ttname"><ahref="classutil_1_1ListGraph.html#a1565480b94bf179067e81d762916ed52">util::ListGraph::operator[]</a></div><divclass="ttdeci">BeginEndWrapper< OutgoingHeadIterator > operator[](NodeIndexType node) const</div><divclass="ttdoc">This loops over the heads of the OutgoingArcs(node).</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l01099">graph.h:1099</a></div></div>
<divclass="ttc"id="classutil_1_1ListGraph_1_1OutgoingHeadIterator_html_ad37fb276585027d2996d3fbebc7984db"><divclass="ttname"><ahref="classutil_1_1ListGraph_1_1OutgoingHeadIterator.html#ad37fb276585027d2996d3fbebc7984db">util::ListGraph::OutgoingHeadIterator::reference</a></div><divclass="ttdeci">const NodeIndexType & reference</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l01207">graph.h:1207</a></div></div>
<divclass="ttc"id="classutil_1_1BaseGraph_html_adb271cf4bcf2de5b5bbe300d7054af29"><divclass="ttname"><ahref="classutil_1_1BaseGraph.html#adb271cf4bcf2de5b5bbe300d7054af29">util::BaseGraph::NodeIndex</a></div><divclass="ttdeci">NodeIndexType NodeIndex</div><divclass="ttdoc">Typedef so you can use Graph::NodeIndex and Graph::ArcIndex to be generic but also to improve the rea...</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l00189">graph.h:189</a></div></div>
<divclass="ttc"id="classutil_1_1BaseGraph_html_a07214b96597069d781e27b1dd17ef83e"><divclass="ttname"><ahref="classutil_1_1BaseGraph.html#a07214b96597069d781e27b1dd17ef83e">util::BaseGraph::GroupForwardArcsByFunctor</a></div><divclass="ttdeci">void GroupForwardArcsByFunctor(const A &a, B *b)</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l00264">graph.h:264</a></div></div>
<divclass="ttc"id="classutil_1_1BaseGraph_html"><divclass="ttname"><ahref="classutil_1_1BaseGraph.html">util::BaseGraph</a></div><divclass="ttdoc">Base class of all Graphs implemented here.</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l00184">graph.h:184</a></div></div>
<divclass="ttc"id="classutil_1_1ReverseArcListGraph_html_aa3306c75dd28ca037205f382ac832b2a"><divclass="ttname"><ahref="classutil_1_1ReverseArcListGraph.html#aa3306c75dd28ca037205f382ac832b2a">util::ReverseArcListGraph::OppositeArc</a></div><divclass="ttdeci">ArcIndexType OppositeArc(ArcIndexType arc) const</div><divclass="ttdoc">Returns the opposite arc of a given arc.</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l01456">graph.h:1456</a></div></div>
<divclass="ttc"id="classutil_1_1ListGraph_html_ac52db792129da62b7ab25372ab90647c"><divclass="ttname"><ahref="classutil_1_1ListGraph.html#ac52db792129da62b7ab25372ab90647c">util::ListGraph::OutDegree</a></div><divclass="ttdeci">ArcIndexType OutDegree(NodeIndexType node) const</div><divclass="ttdoc">Graph jargon: the "degree" of a node is its number of arcs.</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l01121">graph.h:1121</a></div></div>
<divclass="ttc"id="classutil_1_1ListGraph_html"><divclass="ttname"><ahref="classutil_1_1ListGraph.html">util::ListGraph</a></div><divclass="ttdoc">Basic graph implementation without reverse arc.</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l00297">graph.h:297</a></div></div>
<divclass="ttc"id="classutil_1_1ReverseArcMixedGraph_html"><divclass="ttname"><ahref="classutil_1_1ReverseArcMixedGraph.html">util::ReverseArcMixedGraph</a></div><divclass="ttdoc">This graph is a mix between the ReverseArcListGraph and the ReverseArcStaticGraph.</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l00635">graph.h:635</a></div></div>
<divclass="ttc"id="classutil_1_1SVector_html_a01c346b7779b313b6ff1099a10946ed0"><divclass="ttname"><ahref="classutil_1_1SVector.html#a01c346b7779b313b6ff1099a10946ed0">util::SVector::operator[]</a></div><divclass="ttdeci">const T & operator[](int n) const</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l00817">graph.h:817</a></div></div>
<divclass="ttc"id="classutil_1_1StaticGraph_html_a160bf25732e2b1a19e8bf6d853014070"><divclass="ttname"><ahref="classutil_1_1StaticGraph.html#a160bf25732e2b1a19e8bf6d853014070">util::StaticGraph::operator[]</a></div><divclass="ttdeci">BeginEndWrapper< NodeIndexType const * > operator[](NodeIndexType node) const</div><divclass="ttdoc">This loops over the heads of the OutgoingArcs(node).</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l01246">graph.h:1246</a></div></div>
<divclass="ttc"id="classutil_1_1ReverseArcListGraph_html_ad25429b667ebd6e2ac662b76f3e02eae"><divclass="ttname"><ahref="classutil_1_1ReverseArcListGraph.html#ad25429b667ebd6e2ac662b76f3e02eae">util::ReverseArcListGraph::OutDegree</a></div><divclass="ttdeci">ArcIndexType OutDegree(NodeIndexType node) const</div><divclass="ttdoc">ReverseArcListGraph<>::OutDegree() and ::InDegree() work in O(degree).</div><divclass="ttdef"><b>Definition:</b><ahref="graph_8h_source.html#l01440">graph.h:1440</a></div></div>