4#include "ortools/graph/max_flow.h"
16 operations_research::SimpleMaxFlow max_flow_;
21 std::vector<bool> in_source_cut_;
33 sink_node_ = num_vars_ + 1;
41 void add_edge(
int i,
int j, T cap, T rev_cap) {
42 if (cap > 0) max_flow_.AddArcWithCapacity(i, j, cap);
43 if (rev_cap > 0) max_flow_.AddArcWithCapacity(j, i, rev_cap);
47 T delta = cap_source < cap_sink ? cap_source : cap_sink;
53 if (cap_source > 0) max_flow_.AddArcWithCapacity(source_node_, i,
static_cast<operations_research::SimpleMaxFlow::FlowQuantity
>(cap_source));
54 if (cap_sink > 0) max_flow_.AddArcWithCapacity(i, sink_node_,
static_cast<operations_research::SimpleMaxFlow::FlowQuantity
>(cap_sink));
81 max_flow_.Solve(source_node_, sink_node_);
82 std::vector<int> source_cut;
83 max_flow_.GetSourceSideMinCut(&source_cut);
84 in_source_cut_.assign(num_vars_ + 2,
false);
85 for (
int node: source_cut) {
86 in_source_cut_[node] =
true;
89 return e_const_ +
static_cast<T
>(max_flow_.OptimalFlow());
93 return in_source_cut_[x] ? 0 : 1;
Abstract interface for a binary max-flow / QPBO solver.
Definition MaxFlowSolver.hpp:15
int Var
Integer handle identifying a binary variable.
Definition MaxFlowSolver.hpp:20