162 {
167
168 std::queue<int>q;
169 q.push(source);
170 in_queue[source] = true;
172
173 while (!q.empty()) {
174 int now_at = q.front();
175 q.pop();
176 in_queue[now_at] = false;
177
178 for (
auto eid :
adj[now_at])
179 {
181 if (e.flow<e.capacity &&
dist[e.to]>
dist[now_at] + e.cost) {
183 prev[e.to] = eid;
184 flow[e.to] = std::min(flow[now_at], e.capacity - e.flow);
185 if (!in_queue[e.to]) {
186 q.push(e.to);
187 in_queue[e.to] = true;
188 }
189 }
190 }
191 }
192
194 return false;
195
196 int now_at = sink;
197 while (now_at != source) {
198 int prev_edge = prev[now_at];
199 edges[prev_edge].flow += flow[sink];
200 edges[prev_edge ^ 1].flow -= flow[sink];
201 now_at =
edges[prev_edge].from;
202 }
203
204 return true;
205 }
T dist(const boost::polygon::point_data< T > &p1, const boost::polygon::point_data< T > &p2)
Definition Geometry.cpp:298
const int INF
Definition ToolOrderUtils.hpp:20
int total_nodes
Definition ToolOrderUtils.cpp:129