Files
ortools-clone/docs/cpp_graph/util_8h.html
Laurent Perron 0ac3fa17eb more linear doc
2019-07-15 17:42:24 -07:00

136 lines
16 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="ortools.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.2</span>
</div>
</div>
<link rel="icon" href="https://developers.google.com/optimization/images/orLogo.png">
<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><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('util_8h.html','');});
/* @license-end */
</script>
<div id="doc-content">
<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">
<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><!-- doc-content -->
</div>
<div id="footer-container">
<div id="footer">
</div>
</div>
</body>
</html>