2019-06-13 15:51:12 +02:00
<!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"/> -->
< script type = "text/javascript" src = "jquery.js" > < / script >
< script type = "text/javascript" src = "dynsections.js" > < / script >
2020-09-01 16:00:33 +02:00
< link href = "doxygen.css" rel = "stylesheet" type = "text/css" / >
< link href = "styleSheet.tmp.css" rel = "stylesheet" type = "text/css" / >
2019-06-13 15:51:12 +02:00
< / head >
< body >
< div id = "banner-container" >
< div id = "banner" >
2021-12-14 13:41:01 +01:00
< span id = "sfml" > Google OR-Tools 9.2< / span >
2019-06-13 15:51:12 +02:00
< / div >
< / div >
2019-08-07 18:01:08 -07:00
< div id = "content" style = "width: 100%; overflow: hidden;" >
< div style = "margin-left: 15px; margin-top: 5px; float: left; color: #145A32;" >
2019-08-12 09:16:03 -07:00
< h2 > C++ Reference< / h2 >
2019-08-07 18:01:08 -07:00
< ul >
< li > < a href = "../cpp_algorithms/annotated.html" > Algorithms< / a > < / li >
2019-08-12 09:16:03 -07:00
< li > < a href = "../cpp_sat/annotated.html" > CP-SAT< / a > < / li >
2019-08-07 18:01:08 -07:00
< li > < a href = "../cpp_graph/annotated.html" > Graph< / a > < / li >
< li > < a href = "../cpp_routing/annotated.html" > Routing< / a > < / li >
< li > < a href = "../cpp_linear/annotated.html" > Linear solver< / a > < / li >
< / ul >
< / div >
2019-06-13 15:51:12 +02:00
< div id = "content" >
2019-08-07 18:01:08 -07:00
< div align = "center" >
< h1 style = "color: #145A32;" > C++ Reference: Graph< / h1 >
< / div >
2022-01-16 18:02:36 +01:00
<!-- Generated by Doxygen 1.8.15 -->
2020-09-01 16:00:33 +02:00
< script type = "text/javascript" >
2022-01-16 18:02:36 +01:00
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3& dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
2020-09-01 16:00:33 +02:00
/* @license-end */
< / script >
< script type = "text/javascript" src = "menudata.js" > < / script >
< script type = "text/javascript" src = "menu.js" > < / script >
< script type = "text/javascript" >
2022-01-16 18:02:36 +01:00
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3& dn=gpl-2.0.txt GPL-v2 */
2020-09-01 16:00:33 +02:00
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
2022-01-16 18:02:36 +01:00
/* @license-end */< / script >
2020-09-01 16:00:33 +02:00
< div id = "main-nav" > < / 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">
2019-06-13 15:51:12 +02:00
< / div >
2019-07-12 13:25:23 -07:00
< / div >
2020-09-01 16:00:33 +02:00
< script type = "text/javascript" >
2022-01-16 18:02:36 +01:00
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3& dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('christofides_8h_source.html','');});
2020-09-01 16:00:33 +02:00
/* @license-end */
< / script >
< div id = "doc-content" >
<!-- window showing the filter options -->
< div id = "MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
< / div >
<!-- iframe showing the search results (closed by default) -->
< div id = "MSearchResultsWindow" >
< iframe src = "javascript:void(0)" frameborder = "0"
name="MSearchResults" id="MSearchResults">
< / iframe >
< / div >
2019-06-13 15:51:12 +02:00
< div class = "header" >
2022-01-16 18:02:36 +01:00
< div class = "headertitle" >
< div class = "title" > christofides.h< / div > < / div >
2019-06-13 15:51:12 +02:00
< / div > <!-- header -->
< div class = "contents" >
2022-01-16 18:02:36 +01:00
< a href = "christofides_8h.html" > Go to the documentation of this file.< / a > < div class = "fragment" > < div class = "line" > < a name = "l00001" > < / a > < span class = "lineno" > 1< / span >   < span class = "comment" > // Copyright 2010-2021 Google LLC< / span > < / div > < div class = "line" > < a name = "l00002" > < / a > < span class = "lineno" > 2< / span >   < span class = "comment" > // Licensed under the Apache License, Version 2.0 (the " License" );< / span > < / div > < div class = "line" > < a name = "l00003" > < / a > < span class = "lineno" > 3< / span >   < span class = "comment" > // you may not use this file except in compliance with the License.< / span > < / div > < div class = "line" > < a name = "l00004" > < / a > < span class = "lineno" > 4< / span >   < span class = "comment" > // You may obtain a copy of the License at< / span > < / div > < div class = "line" > < a name = "l00005" > < / a > < span class = "lineno" > 5< / span >   < span class = "comment" > //< / span > < / div > < div class = "line" > < a name = "l00006" > < / a > < span class = "lineno" > 6< / span >   < span class = "comment" > // http://www.apache.org/licenses/LICENSE-2.0< / span > < / div > < div class = "line" > < a name = "l00007" > < / a > < span class = "lineno" > 7< / span >   < span class = "comment" > //< / span > < / div > < div class = "line" > < a name = "l00008" > < / a > < span class = "lineno" > 8< / span >   < span class = "comment" > // Unless required by applicable law or agreed to in writing, software< / span > < / div > < div class = "line" > < a name = "l00009" > < / a > < span class = "lineno" > 9< / span >   < span class = "comment" > // distributed under the License is distributed on an " AS IS" BASIS,< / span > < / div > < div class = "line" > < a name = "l00010" > < / a > < span class = "lineno" > 10< / span >   < span class = "comment" > // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.< / span > < / div > < div class = "line" > < a name = "l00011" > < / a > < span class = "lineno" > 11< / span >   < span class = "comment" > // See the License for the specific language governing permissions and< / span > < / div > < div class = "line" > < a name = "l00012" > < / a > < span class = "lineno" > 12< / span >   < span class = "comment" > // limitations under the License.< / span > < / div > < div class = "line" > < a name = "l00013" > < / a > < span class = "lineno" > 13< / span >   < / div > < div class = "line" > < a name = "l00014" > < / a > < span class = "lineno" > 14< / span >   < span class = "comment" > // ChristofidesPathSolver computes an approximate solution to the Traveling< / span > < / div > < div class = "line" > < a name = "l00015" > < / a > < span class = "lineno" > 15< / span >   < span class = "comment" > // Salesman Problen using the Christofides algorithm (c.f.< / span > < / div > < div class = "line" > < a name = "l00016" > < / a > < span class = "lineno" > 16< / span >   < span class = "comment" > // https://en.wikipedia.org/wiki/Christofides_algorithm).< / span > < / div > < div class = "line" > < a name = "l00017" > < / a > < span class = "lineno" > 17< / span >   < span class = "comment" > // Note that the algorithm guarantees finding a solution within 3/2 of the< / span > < / div > < div class = "line" > < a name = "l00018" > < / a > < span class = "lineno" > 18< / span >   < span class = "comment" > // optimum when using minimum weight perfect matching in the matching phase.< / span > < / div > < div class = "line" > < a name = "l00019" > < / a > < span class = "lineno" > 19< / span >   < span class = "comment" > // The complexity of the algorithm is dominated by the complexity of the< / span > < / div > < div class = "line" > < a name = "l00020" > < / a > < span class = "lineno" > 20< / span >   < span class = "comment" > // matching algorithm: O(n^2 * log(n)) if minimal matching is used, or at least< / span > < / div > < div class = "line" > < a name = "l00021" > < / a > < span class = "lineno" > 21< / span >   < span class = "comment" > // O(n^3) or O(nmlog(n)) otherwise, depending on the implementation of the< / span > < / div > < div class = "line" > < a name = "l00022" > < / a > < span class = "lineno" > 22< / span >   < span class = "comment" > // perfect matching algorithm used, where n is the number of nodes and m is the< / span > < / div > < div class = "line" > < a name = "l00023" > < / a > < span class = "lineno" > 23< / span >   < span class = "comment" > // number of edges of the subgraph induced by odd-degree nodes of the minimum< / span > < / div > < div class = "line" > < a name = "l00024" > < / a > < span class = "lineno" > 24< / span >   < span class = "comment" > // spanning t
< div class = "ttc" id = "namespaceoperations__research_html_a7ffcae041a5d746371436101400cdb6b" > < div class = "ttname" > < a href = "namespaceoperations__research.html#a7ffcae041a5d746371436101400cdb6b" > operations_research::NodeIndex< / a > < / div > < div class = "ttdeci" > int32_t NodeIndex< / div > < div class = "ttdef" > < b > Definition:< / b > < a href = "ebert__graph_8h_source.html#l00193" > ebert_graph.h:193< / a > < / div > < / div >
< div class = "ttc" id = "classoperations__research_1_1_christofides_path_solver_html_a942f29030f08426e7e318204e987e2f7" > < div class = "ttname" > < a href = "classoperations__research_1_1_christofides_path_solver.html#a942f29030f08426e7e318204e987e2f7" > operations_research::ChristofidesPathSolver::Solve< / a > < / div > < div class = "ttdeci" > bool Solve()< / div > < div class = "ttdef" > < b > Definition:< / b > < a href = "christofides_8h_source.html#l00252" > christofides.h:252< / a > < / div > < / div >
< div class = "ttc" id = "classoperations__research_1_1_christofides_path_solver_html" > < div class = "ttname" > < a href = "classoperations__research_1_1_christofides_path_solver.html" > operations_research::ChristofidesPathSolver< / a > < / div > < div class = "ttdef" > < b > Definition:< / b > < a href = "christofides_8h_source.html#l00050" > christofides.h:50< / a > < / div > < / div >
< div class = "ttc" id = "classoperations__research_1_1_christofides_path_solver_html_a87145cf1f5a36d27fd856596a23d495a" > < div class = "ttname" > < a href = "classoperations__research_1_1_christofides_path_solver.html#a87145cf1f5a36d27fd856596a23d495a" > operations_research::ChristofidesPathSolver::ChristofidesPathSolver< / a > < / div > < div class = "ttdeci" > ChristofidesPathSolver(NodeIndex num_nodes, CostFunction costs)< / div > < div class = "ttdef" > < b > Definition:< / b > < a href = "christofides_8h_source.html#l00220" > christofides.h:220< / a > < / div > < / div >
< div class = "ttc" id = "classoperations__research_1_1_christofides_path_solver_html_a3076d9001536ea98d419faa81e7d8a47" > < div class = "ttname" > < a href = "classoperations__research_1_1_christofides_path_solver.html#a3076d9001536ea98d419faa81e7d8a47" > operations_research::ChristofidesPathSolver::TravelingSalesmanPath< / a > < / div > < div class = "ttdeci" > std::vector< NodeIndex > TravelingSalesmanPath()< / div > < div class = "ttdef" > < b > Definition:< / b > < a href = "christofides_8h_source.html#l00241" > christofides.h:241< / a > < / div > < / div >
< div class = "ttc" id = "namespaceoperations__research_html_aa63055860fc53f8eed56d23d2571c180" > < div class = "ttname" > < a href = "namespaceoperations__research.html#aa63055860fc53f8eed56d23d2571c180" > operations_research::BuildEulerianTourFromNode< / a > < / div > < div class = "ttdeci" > std::vector< NodeIndex > BuildEulerianTourFromNode(const Graph & graph, NodeIndex root)< / div > < div class = "ttdef" > < b > Definition:< / b > < a href = "eulerian__path_8h_source.html#l00116" > eulerian_path.h:116< / a > < / div > < / div >
< div class = "ttc" id = "classoperations__research_1_1_christofides_path_solver_html_a1d4f082de5fc3eed348d65eb30b5f3e7ab66d0823917c9351a4cb68dff77f445a" > < div class = "ttname" > < a href = "classoperations__research_1_1_christofides_path_solver.html#a1d4f082de5fc3eed348d65eb30b5f3e7ab66d0823917c9351a4cb68dff77f445a" > operations_research::ChristofidesPathSolver::MatchingAlgorithm::MINIMUM_WEIGHT_MATCHING< / a > < / div > < / div >
< div class = "ttc" id = "minimum__spanning__tree_8h_html" > < div class = "ttname" > < a href = "minimum__spanning__tree_8h.html" > minimum_spanning_tree.h< / a > < / div > < / div >
< div class = "ttc" id = "classoperations__research_1_1_christofides_path_solver_html_ae2b64dddd58baf1bc5e01cb14971e52e" > < div class = "ttname" > < a href = "classoperations__research_1_1_christofides_path_solver.html#ae2b64dddd58baf1bc5e01cb14971e52e" > operations_research::ChristofidesPathSolver::SetMatchingAlgorithm< / a > < / div > < div class = "ttdeci" > void SetMatchingAlgorithm(MatchingAlgorithm matching)< / div > < div class = "ttdef" > < b > Definition:< / b > < a href = "christofides_8h_source.html#l00069" > christofides.h:69< / a > < / div > < / div >
< div class = "ttc" id = "namespaceoperations__research_html_aecf320bda6e95d1edaf3a546673e3e6b" > < div class = "ttname" > < a href = "namespaceoperations__research.html#aecf320bda6e95d1edaf3a546673e3e6b" > operations_research::ArcIndex< / a > < / div > < div class = "ttdeci" > int32_t ArcIndex< / div > < div class = "ttdef" > < b > Definition:< / b > < a href = "ebert__graph_8h_source.html#l00202" > ebert_graph.h:202< / a > < / div > < / div >
< div class = "ttc" id = "classoperations__research_1_1_christofides_path_solver_html_a1d4f082de5fc3eed348d65eb30b5f3e7a201b88f6589fa1271207fe29f583dc96" > < div class = "ttname" > < a href = "classoperations__research_1_1_christofides_path_solver.html#a1d4f082de5fc3eed348d65eb30b5f3e7a201b88f6589fa1271207fe29f583dc96" > operations_research::ChristofidesPathSolver::MatchingAlgorithm::MINIMUM_WEIGHT_MATCHING_WITH_MIP< / a > < / div > < / div >
< div class = "ttc" id = "graph_8h_html" > < div class = "ttname" > < a href = "graph_8h.html" > graph.h< / a > < / div > < / div >
< div class = "ttc" id = "classoperations__research_1_1_christofides_path_solver_html_a1d4f082de5fc3eed348d65eb30b5f3e7a99c5fe202c37dcd8ed9cc60926a4f525" > < div class = "ttname" > < a href = "classoperations__research_1_1_christofides_path_solver.html#a1d4f082de5fc3eed348d65eb30b5f3e7a99c5fe202c37dcd8ed9cc60926a4f525" > operations_research::ChristofidesPathSolver::MatchingAlgorithm::MINIMAL_WEIGHT_MATCHING< / a > < / div > < / div >
< div class = "ttc" id = "namespaceoperations__research_html" > < div class = "ttname" > < a href = "namespaceoperations__research.html" > operations_research< / a > < / div > < div class = "ttdef" > < b > Definition:< / b > < a href = "christofides_8h_source.html#l00043" > christofides.h:43< / a > < / div > < / div >
< div class = "ttc" id = "namespaceoperations__research_html_ab1cf773de0cae72d0c44efe5b8f4bb89" > < div class = "ttname" > < a href = "namespaceoperations__research.html#ab1cf773de0cae72d0c44efe5b8f4bb89" > operations_research::IsEulerianGraph< / a > < / div > < div class = "ttdeci" > bool IsEulerianGraph(const Graph & graph)< / div > < div class = "ttdef" > < b > Definition:< / b > < a href = "eulerian__path_8h_source.html#l00040" > eulerian_path.h:40< / a > < / div > < / div >
< div class = "ttc" id = "classoperations__research_1_1_christofides_path_solver_html_ab558649a26fef3a74f0909ef5af45e90" > < div class = "ttname" > < a href = "classoperations__research_1_1_christofides_path_solver.html#ab558649a26fef3a74f0909ef5af45e90" > operations_research::ChristofidesPathSolver::TravelingSalesmanCost< / a > < / div > < div class = "ttdeci" > CostType TravelingSalesmanCost()< / div > < div class = "ttdef" > < b > Definition:< / b > < a href = "christofides_8h_source.html#l00230" > christofides.h:230< / a > < / div > < / div >
< div class = "ttc" id = "namespaceoperations__research_html_a33a2f4c26fd60cd0fa98257b571c974f" > < div class = "ttname" > < a href = "namespaceoperations__research.html#a33a2f4c26fd60cd0fa98257b571c974f" > operations_research::BuildPrimMinimumSpanningTree< / a > < / div > < div class = "ttdeci" > std::vector< typename Graph::ArcIndex > BuildPrimMinimumSpanningTree(const Graph & graph, const ArcValue & arc_value)< / div > < div class = "ttdef" > < b > Definition:< / b > < a href = "minimum__spanning__tree_8h_source.html#l00115" > minimum_spanning_tree.h:115< / a > < / div > < / div >
< div class = "ttc" id = "namespaceoperations__research_html_a08c4f1d4e19627689e141cf08b9f77bc" > < div class = "ttname" > < a href = "namespaceoperations__research.html#a08c4f1d4e19627689e141cf08b9f77bc" > operations_research::ComputeMinimumWeightMatching< / a > < / div > < div class = "ttdeci" > absl::StatusOr< std::vector< std::pair< typename GraphType::NodeIndex, typename GraphType::NodeIndex > > > ComputeMinimumWeightMatching(const GraphType & graph, const WeightFunctionType & weight)< / div > < div class = "ttdef" > < b > Definition:< / b > < a href = "christofides_8h_source.html#l00109" > christofides.h:109< / a > < / div > < / div >
< div class = "ttc" id = "classoperations__research_1_1_christofides_path_solver_html_a1d4f082de5fc3eed348d65eb30b5f3e7" > < div class = "ttname" > < a href = "classoperations__research_1_1_christofides_path_solver.html#a1d4f082de5fc3eed348d65eb30b5f3e7" > operations_research::ChristofidesPathSolver::MatchingAlgorithm< / a > < / div > < div class = "ttdeci" > MatchingAlgorithm< / div > < div class = "ttdef" > < b > Definition:< / b > < a href = "christofides_8h_source.html#l00052" > christofides.h:52< / a > < / div > < / div >
< div class = "ttc" id = "eulerian__path_8h_html" > < div class = "ttname" > < a href = "eulerian__path_8h.html" > eulerian_path.h< / a > < / div > < / div >
< div class = "ttc" id = "namespaceoperations__research_html_a93c78280670aaeea4913d156699a403a" > < div class = "ttname" > < a href = "namespaceoperations__research.html#a93c78280670aaeea4913d156699a403a" > operations_research::ComputeMinimumWeightMatchingWithMIP< / a > < / div > < div class = "ttdeci" > absl::StatusOr< std::vector< std::pair< typename GraphType::NodeIndex, typename GraphType::NodeIndex > > > ComputeMinimumWeightMatchingWithMIP(const GraphType & graph, const WeightFunctionType & weight)< / div > < div class = "ttdef" > < b > Definition:< / b > < a href = "christofides_8h_source.html#l00145" > christofides.h:145< / a > < / div > < / div >
< div class = "ttc" id = "classutil_1_1_reverse_arc_list_graph_html_a7b505ba4a01bce342d049f5a8674da72" > < div class = "ttname" > < a href = "classutil_1_1_reverse_arc_list_graph.html#a7b505ba4a01bce342d049f5a8674da72" > util::ReverseArcListGraph::AddArc< / a > < / div > < div class = "ttdeci" > ArcIndexType AddArc(NodeIndexType tail, NodeIndexType head)< / div > < div class = "ttdef" > < b > Definition:< / b > < a href = "graph_8h_source.html#l01508" > graph.h:1508< / a > < / div > < / div >
2021-01-26 11:28:50 +01:00
< / div > <!-- fragment --> < / div > <!-- contents -->
< / div > <!-- doc - content -->
2019-08-07 18:01:08 -07:00
< / div >
2019-06-13 15:51:12 +02:00
< / div >
< div id = "footer-container" >
< div id = "footer" >
< / div >
< / div >
< / body >
< / html >