Files
ortools-clone/docs/cpp_graph/util_8h.html
2019-06-13 15:51:12 +02:00

179 lines
18 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>OR-Tools</title>
<meta http-equiv="Content-Type" content="text/html;"/>
<meta charset="utf-8"/>
<!--<link rel='stylesheet' type='text/css' href="https://fonts.googleapis.com/css?family=Ubuntu:400,700,400italic"/>-->
<link rel="stylesheet" type="text/css" href="doxygen.css" title="default" media="screen,print" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
</head>
<body>
<div id="banner-container">
<div id="banner">
<span id="sfml">OR-Tools 7.1@</span>
</div>
</div>
<div id="content">
<!-- Generated by Doxygen 1.8.15 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>File&#160;Members</span></a></li>
</ul>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_a7cc1eeded8f693d0da6c729bc88c45a.html">ortools</a></li><li class="navelem"><a class="el" href="dir_725f3a5915051842f84e3ea508be2a62.html">graph</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#namespaces">Namespaces</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">util.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &lt;algorithm&gt;</code><br />
<code>#include &lt;map&gt;</code><br />
<code>#include &lt;memory&gt;</code><br />
<code>#include &lt;set&gt;</code><br />
<code>#include &lt;string&gt;</code><br />
<code>#include &lt;unordered_map&gt;</code><br />
<code>#include &lt;vector&gt;</code><br />
<code>#include &quot;ortools/base/hash.h&quot;</code><br />
<code>#include &quot;ortools/base/map_util.h&quot;</code><br />
<code>#include &quot;<a class="el" href="connected__components_8h_source.html">ortools/graph/connected_components.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="graph_8h_source.html">ortools/graph/graph.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="iterators_8h_source.html">ortools/graph/iterators.h</a>&quot;</code><br />
</div><div class="textblock"><div class="dynheader">
Include dependency graph for util.h:</div>
<div class="dyncontent">
<div class="center"><img src="util_8h__incl.png" border="0" usemap="#util_8h" alt=""/></div>
<map name="util_8h" id="util_8h">
<area shape="rect" title=" " alt="" coords="2019,5,2068,31"/>
<area shape="rect" title=" " alt="" coords="1811,172,1887,197"/>
<area shape="rect" title=" " alt="" coords="5,172,53,197"/>
<area shape="rect" title=" " alt="" coords="77,172,146,197"/>
<area shape="rect" title=" " alt="" coords="171,172,210,197"/>
<area shape="rect" title=" " alt="" coords="2243,85,2297,111"/>
<area shape="rect" title=" " alt="" coords="2322,85,2437,111"/>
<area shape="rect" title=" " alt="" coords="2251,252,2308,277"/>
<area shape="rect" title=" " alt="" coords="2461,85,2599,111"/>
<area shape="rect" title=" " alt="" coords="2623,85,2675,111"/>
<area shape="rect" title=" " alt="" coords="234,172,285,197"/>
<area shape="rect" title=" " alt="" coords="2699,85,2871,111"/>
<area shape="rect" title=" " alt="" coords="309,172,469,197"/>
<area shape="rect" href="connected__components_8h.html" title=" " alt="" coords="825,79,990,117"/>
<area shape="rect" href="graph_8h.html" title=" " alt="" coords="1970,85,2118,111"/>
<area shape="rect" href="iterators_8h.html" title=" " alt="" coords="2671,172,2833,197"/>
<area shape="rect" title=" " alt="" coords="1278,172,1356,197"/>
<area shape="rect" title=" " alt="" coords="1380,172,1462,197"/>
<area shape="rect" title=" " alt="" coords="1486,165,1612,204"/>
<area shape="rect" title=" " alt="" coords="543,165,669,204"/>
<area shape="rect" title=" " alt="" coords="693,172,815,197"/>
<area shape="rect" title=" " alt="" coords="839,172,995,197"/>
<area shape="rect" title=" " alt="" coords="1636,172,1788,197"/>
<area shape="rect" title=" " alt="" coords="1019,172,1167,197"/>
<area shape="rect" title=" " alt="" coords="1191,172,1254,197"/>
<area shape="rect" title=" " alt="" coords="2373,172,2437,197"/>
<area shape="rect" title=" " alt="" coords="2461,172,2520,197"/>
<area shape="rect" title=" " alt="" coords="2544,172,2596,197"/>
<area shape="rect" title=" " alt="" coords="1962,172,2008,197"/>
<area shape="rect" title=" " alt="" coords="2032,165,2173,204"/>
<area shape="rect" title=" " alt="" coords="2197,172,2349,197"/>
<area shape="rect" title=" " alt="" coords="2720,252,2783,277"/>
</map>
</div>
</div>
<p><a href="util_8h_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1UndirectedAdjacencyListsOfDirectedGraph.html">util::UndirectedAdjacencyListsOfDirectedGraph&lt; Graph &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This can be used to view a directed graph (that supports reverse arcs) from <a class="el" href="graph_8h.html">graph.h</a> as un undirected graph: operator[](node) returns a pseudo-container that iterates over all nodes adjacent to "node" (from outgoing or incoming arcs). <a href="classutil_1_1UndirectedAdjacencyListsOfDirectedGraph.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1UndirectedAdjacencyListsOfDirectedGraph_1_1AdjacencyListIterator.html">util::UndirectedAdjacencyListsOfDirectedGraph&lt; Graph &gt;::AdjacencyListIterator</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
Namespaces</h2></td></tr>
<tr class="memitem:namespaceutil"><td class="memItemLeft" align="right" valign="top"> &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceutil.html">util</a></td></tr>
<tr class="memdesc:namespaceutil"><td class="mdescLeft">&#160;</td><td class="mdescRight">Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ac4af76993c891ee4ad507783edec2a1c"><td class="memTemplParams" colspan="2">template&lt;class Graph &gt; </td></tr>
<tr class="memitem:ac4af76993c891ee4ad507783edec2a1c"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceutil.html#ac4af76993c891ee4ad507783edec2a1c">util::GraphHasSelfArcs</a> (const Graph &amp;graph)</td></tr>
<tr class="memdesc:ac4af76993c891ee4ad507783edec2a1c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Here's a set of simple diagnosis tools. <a href="namespaceutil.html#ac4af76993c891ee4ad507783edec2a1c">More...</a><br /></td></tr>
<tr class="separator:ac4af76993c891ee4ad507783edec2a1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6b37593970a26f5c88b3d2ea9acea9d2"><td class="memTemplParams" colspan="2">template&lt;class Graph &gt; </td></tr>
<tr class="memitem:a6b37593970a26f5c88b3d2ea9acea9d2"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceutil.html#a6b37593970a26f5c88b3d2ea9acea9d2">util::GraphHasDuplicateArcs</a> (const Graph &amp;graph)</td></tr>
<tr class="separator:a6b37593970a26f5c88b3d2ea9acea9d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a784b483eeae1b49164a8a02fe9c0d3ba"><td class="memTemplParams" colspan="2">template&lt;class Graph &gt; </td></tr>
<tr class="memitem:a784b483eeae1b49164a8a02fe9c0d3ba"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceutil.html#a784b483eeae1b49164a8a02fe9c0d3ba">util::GraphIsSymmetric</a> (const Graph &amp;graph)</td></tr>
<tr class="separator:a784b483eeae1b49164a8a02fe9c0d3ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a97311561fd1f01e9f35b2f7ce18b0af3"><td class="memTemplParams" colspan="2">template&lt;class Graph &gt; </td></tr>
<tr class="memitem:a97311561fd1f01e9f35b2f7ce18b0af3"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceutil.html#a97311561fd1f01e9f35b2f7ce18b0af3">util::GraphIsWeaklyConnected</a> (const Graph &amp;graph)</td></tr>
<tr class="separator:a97311561fd1f01e9f35b2f7ce18b0af3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0ed748741b17dad9e6cc485728bb0043"><td class="memTemplParams" colspan="2">template&lt;class Graph &gt; </td></tr>
<tr class="memitem:a0ed748741b17dad9e6cc485728bb0043"><td class="memTemplItemLeft" align="right" valign="top">std::unique_ptr&lt; Graph &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceutil.html#a0ed748741b17dad9e6cc485728bb0043">util::CopyGraph</a> (const Graph &amp;graph)</td></tr>
<tr class="memdesc:a0ed748741b17dad9e6cc485728bb0043"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a fresh copy of a given graph. <a href="namespaceutil.html#a0ed748741b17dad9e6cc485728bb0043">More...</a><br /></td></tr>
<tr class="separator:a0ed748741b17dad9e6cc485728bb0043"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acfecdce43e9933bde2a94fd879f12f5f"><td class="memTemplParams" colspan="2">template&lt;class Graph &gt; </td></tr>
<tr class="memitem:acfecdce43e9933bde2a94fd879f12f5f"><td class="memTemplItemLeft" align="right" valign="top">std::unique_ptr&lt; Graph &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceutil.html#acfecdce43e9933bde2a94fd879f12f5f">util::RemapGraph</a> (const Graph &amp;graph, const std::vector&lt; int &gt; &amp;new_node_index)</td></tr>
<tr class="memdesc:acfecdce43e9933bde2a94fd879f12f5f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a remapped copy of graph "graph", where node i becomes node new_node_index[i]. <a href="namespaceutil.html#acfecdce43e9933bde2a94fd879f12f5f">More...</a><br /></td></tr>
<tr class="separator:acfecdce43e9933bde2a94fd879f12f5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad1df170a504d335462a1104a942e6069"><td class="memTemplParams" colspan="2">template&lt;class Graph &gt; </td></tr>
<tr class="memitem:ad1df170a504d335462a1104a942e6069"><td class="memTemplItemLeft" align="right" valign="top">std::unique_ptr&lt; Graph &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceutil.html#ad1df170a504d335462a1104a942e6069">util::GetSubgraphOfNodes</a> (const Graph &amp;graph, const std::vector&lt; int &gt; &amp;nodes)</td></tr>
<tr class="memdesc:ad1df170a504d335462a1104a942e6069"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets the induced subgraph of "graph" restricted to the nodes in "nodes": the resulting graph will have exactly nodes.size() nodes, and its node #0 will be the former graph's node #nodes[0], etc. <a href="namespaceutil.html#ad1df170a504d335462a1104a942e6069">More...</a><br /></td></tr>
<tr class="separator:ad1df170a504d335462a1104a942e6069"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab34783e729bb5fc99042893f6bfcbb2f"><td class="memTemplParams" colspan="2">template&lt;class Graph &gt; </td></tr>
<tr class="memitem:ab34783e729bb5fc99042893f6bfcbb2f"><td class="memTemplItemLeft" align="right" valign="top">std::vector&lt; int &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceutil.html#ab34783e729bb5fc99042893f6bfcbb2f">util::GetWeaklyConnectedComponents</a> (const Graph &amp;graph)</td></tr>
<tr class="memdesc:ab34783e729bb5fc99042893f6bfcbb2f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the weakly connected components of a directed graph that provides the OutgoingOrOppositeIncomingArcs() API, and returns them as a mapping from node to component index. <a href="namespaceutil.html#ab34783e729bb5fc99042893f6bfcbb2f">More...</a><br /></td></tr>
<tr class="separator:ab34783e729bb5fc99042893f6bfcbb2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa9fb4c9a176acaf72053b11727436e9e"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceutil.html#aa9fb4c9a176acaf72053b11727436e9e">util::IsSubsetOf0N</a> (const std::vector&lt; int &gt; &amp;v, int n)</td></tr>
<tr class="memdesc:aa9fb4c9a176acaf72053b11727436e9e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns true iff the given vector is a subset of [0..n-1], i.e. <a href="namespaceutil.html#aa9fb4c9a176acaf72053b11727436e9e">More...</a><br /></td></tr>
<tr class="separator:aa9fb4c9a176acaf72053b11727436e9e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad7986b01cf61a31c09a27b4a97db6a83"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceutil.html#ad7986b01cf61a31c09a27b4a97db6a83">util::IsValidPermutation</a> (const std::vector&lt; int &gt; &amp;v)</td></tr>
<tr class="memdesc:ad7986b01cf61a31c09a27b4a97db6a83"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns true iff the given vector is a permutation of [0..size()-1]. <a href="namespaceutil.html#ad7986b01cf61a31c09a27b4a97db6a83">More...</a><br /></td></tr>
<tr class="separator:ad7986b01cf61a31c09a27b4a97db6a83"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8a06031908a024a50dbdddc394a22490"><td class="memTemplParams" colspan="2">template&lt;class Graph &gt; </td></tr>
<tr class="memitem:a8a06031908a024a50dbdddc394a22490"><td class="memTemplItemLeft" align="right" valign="top">std::unique_ptr&lt; Graph &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceutil.html#a8a06031908a024a50dbdddc394a22490">util::RemoveSelfArcsAndDuplicateArcs</a> (const Graph &amp;graph)</td></tr>
<tr class="memdesc:a8a06031908a024a50dbdddc394a22490"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a copy of "graph", without self-arcs and duplicate arcs. <a href="namespaceutil.html#a8a06031908a024a50dbdddc394a22490">More...</a><br /></td></tr>
<tr class="separator:a8a06031908a024a50dbdddc394a22490"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a06fa201576c927d92657e090fa86bfdb"><td class="memTemplParams" colspan="2">template&lt;class Graph &gt; </td></tr>
<tr class="memitem:a06fa201576c927d92657e090fa86bfdb"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceutil.html#a06fa201576c927d92657e090fa86bfdb">util::RemoveCyclesFromPath</a> (const Graph &amp;graph, std::vector&lt; int &gt; *arc_path)</td></tr>
<tr class="memdesc:a06fa201576c927d92657e090fa86bfdb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Given an arc path, changes it to a sub-path with the same source and destination but without any cycle. <a href="namespaceutil.html#a06fa201576c927d92657e090fa86bfdb">More...</a><br /></td></tr>
<tr class="separator:a06fa201576c927d92657e090fa86bfdb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adbb18bcb2f9d64cbbaeb57c328f57e7b"><td class="memTemplParams" colspan="2">template&lt;class Graph &gt; </td></tr>
<tr class="memitem:adbb18bcb2f9d64cbbaeb57c328f57e7b"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceutil.html#adbb18bcb2f9d64cbbaeb57c328f57e7b">util::PathHasCycle</a> (const Graph &amp;graph, const std::vector&lt; int &gt; &amp;arc_path)</td></tr>
<tr class="memdesc:adbb18bcb2f9d64cbbaeb57c328f57e7b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns true iff the given path contains a cycle. <a href="namespaceutil.html#adbb18bcb2f9d64cbbaeb57c328f57e7b">More...</a><br /></td></tr>
<tr class="separator:adbb18bcb2f9d64cbbaeb57c328f57e7b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae469c559688b92f36bae2788c2e6063e"><td class="memTemplParams" colspan="2">template&lt;class Graph &gt; </td></tr>
<tr class="memitem:ae469c559688b92f36bae2788c2e6063e"><td class="memTemplItemLeft" align="right" valign="top">std::vector&lt; int &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceutil.html#ae469c559688b92f36bae2788c2e6063e">util::ComputeOnePossibleReverseArcMapping</a> (const Graph &amp;graph, bool die_if_not_symmetric)</td></tr>
<tr class="memdesc:ae469c559688b92f36bae2788c2e6063e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a vector representing a mapping from arcs to arcs such that each arc is mapped to another arc with its (tail, head) flipped, if such an arc exists (otherwise it is mapped to -1). <a href="namespaceutil.html#ae469c559688b92f36bae2788c2e6063e">More...</a><br /></td></tr>
<tr class="separator:ae469c559688b92f36bae2788c2e6063e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->
</div>
<div id="footer-container">
<div id="footer">
</div>
</div>
</body>
</html>