164 NodeIt& next(NodeIt& i) const { graph->next(i.n); return i; } |
164 NodeIt& next(NodeIt& i) const { graph->next(i.n); return i; } |
165 OutEdgeIt& next(OutEdgeIt& i) const { graph->next(i.e); return i; } |
165 OutEdgeIt& next(OutEdgeIt& i) const { graph->next(i.e); return i; } |
166 InEdgeIt& next(InEdgeIt& i) const { graph->next(i.e); return i; } |
166 InEdgeIt& next(InEdgeIt& i) const { graph->next(i.e); return i; } |
167 EdgeIt& next(EdgeIt& i) const { graph->next(i.e); return i; } |
167 EdgeIt& next(EdgeIt& i) const { graph->next(i.e); return i; } |
168 |
168 |
169 Node tail(const Edge& e) const { |
169 Node source(const Edge& e) const { |
170 return Node(graph->tail(static_cast<typename Graph::Edge>(e))); } |
170 return Node(graph->source(static_cast<typename Graph::Edge>(e))); } |
171 Node head(const Edge& e) const { |
171 Node target(const Edge& e) const { |
172 return Node(graph->head(static_cast<typename Graph::Edge>(e))); } |
172 return Node(graph->target(static_cast<typename Graph::Edge>(e))); } |
173 |
173 |
174 bool valid(const Node& n) const { |
174 bool valid(const Node& n) const { |
175 return graph->valid(static_cast<typename Graph::Node>(n)); } |
175 return graph->valid(static_cast<typename Graph::Node>(n)); } |
176 bool valid(const Edge& e) const { |
176 bool valid(const Edge& e) const { |
177 return graph->valid(static_cast<typename Graph::Edge>(e)); } |
177 return graph->valid(static_cast<typename Graph::Edge>(e)); } |
183 Node aNode(const InEdgeIt& e) const { return Node(graph->aNode(e.e)); } |
183 Node aNode(const InEdgeIt& e) const { return Node(graph->aNode(e.e)); } |
184 Node bNode(const OutEdgeIt& e) const { return Node(graph->bNode(e.e)); } |
184 Node bNode(const OutEdgeIt& e) const { return Node(graph->bNode(e.e)); } |
185 Node bNode(const InEdgeIt& e) const { return Node(graph->bNode(e.e)); } |
185 Node bNode(const InEdgeIt& e) const { return Node(graph->bNode(e.e)); } |
186 |
186 |
187 Node addNode() const { return Node(graph->addNode()); } |
187 Node addNode() const { return Node(graph->addNode()); } |
188 Edge addEdge(const Node& tail, const Node& head) const { |
188 Edge addEdge(const Node& source, const Node& target) const { |
189 return Edge(graph->addEdge(tail, head)); } |
189 return Edge(graph->addEdge(source, target)); } |
190 |
190 |
191 void erase(const Node& i) const { graph->erase(i); } |
191 void erase(const Node& i) const { graph->erase(i); } |
192 void erase(const Edge& i) const { graph->erase(i); } |
192 void erase(const Edge& i) const { graph->erase(i); } |
193 |
193 |
194 void clear() const { graph->clear(); } |
194 void clear() const { graph->clear(); } |
270 Node bNode(const OutEdgeIt& e) const { |
270 Node bNode(const OutEdgeIt& e) const { |
271 return Node(this->graph->bNode(e.e)); } |
271 return Node(this->graph->bNode(e.e)); } |
272 Node bNode(const InEdgeIt& e) const { |
272 Node bNode(const InEdgeIt& e) const { |
273 return Node(this->graph->bNode(e.e)); } |
273 return Node(this->graph->bNode(e.e)); } |
274 |
274 |
275 Node tail(const Edge& e) const { |
275 Node source(const Edge& e) const { |
276 return GraphWrapper<Graph>::head(e); } |
276 return GraphWrapper<Graph>::target(e); } |
277 Node head(const Edge& e) const { |
277 Node target(const Edge& e) const { |
278 return GraphWrapper<Graph>::tail(e); } |
278 return GraphWrapper<Graph>::source(e); } |
279 |
279 |
280 }; |
280 }; |
281 |
281 |
282 /// Wrapper for hiding nodes and edges from a graph. |
282 /// Wrapper for hiding nodes and edges from a graph. |
283 |
283 |
487 // GraphWrapper<Graph>::next(n); |
487 // GraphWrapper<Graph>::next(n); |
488 // return n; |
488 // return n; |
489 // } |
489 // } |
490 OutEdgeIt& next(OutEdgeIt& e) const { |
490 OutEdgeIt& next(OutEdgeIt& e) const { |
491 if (e.out_or_in) { |
491 if (e.out_or_in) { |
492 typename Graph::Node n=this->graph->tail(e.out); |
492 typename Graph::Node n=this->graph->source(e.out); |
493 this->graph->next(e.out); |
493 this->graph->next(e.out); |
494 if (!this->graph->valid(e.out)) { |
494 if (!this->graph->valid(e.out)) { |
495 e.out_or_in=false; this->graph->first(e.in, n); } |
495 e.out_or_in=false; this->graph->first(e.in, n); } |
496 } else { |
496 } else { |
497 this->graph->next(e.in); |
497 this->graph->next(e.in); |
504 // // graph->next(e.e); |
504 // // graph->next(e.e); |
505 // return e; |
505 // return e; |
506 // } |
506 // } |
507 |
507 |
508 Node aNode(const OutEdgeIt& e) const { |
508 Node aNode(const OutEdgeIt& e) const { |
509 if (e.out_or_in) return this->graph->tail(e); else |
509 if (e.out_or_in) return this->graph->source(e); else |
510 return this->graph->head(e); } |
510 return this->graph->target(e); } |
511 Node bNode(const OutEdgeIt& e) const { |
511 Node bNode(const OutEdgeIt& e) const { |
512 if (e.out_or_in) return this->graph->head(e); else |
512 if (e.out_or_in) return this->graph->target(e); else |
513 return this->graph->tail(e); } |
513 return this->graph->source(e); } |
514 }; |
514 }; |
515 |
515 |
516 /// A wrapper for composing the residual graph for directed flow and circulation problems. |
516 /// A wrapper for composing the residual graph for directed flow and circulation problems. |
517 |
517 |
518 /// A wrapper for composing the residual graph for directed flow and circulation problems. |
518 /// A wrapper for composing the residual graph for directed flow and circulation problems. |
722 this->graph->next(e.e); } |
722 this->graph->next(e.e); } |
723 } |
723 } |
724 return e; |
724 return e; |
725 } |
725 } |
726 |
726 |
727 Node tail(Edge e) const { |
727 Node source(Edge e) const { |
728 return ((e.forward) ? this->graph->tail(e) : this->graph->head(e)); } |
728 return ((e.forward) ? this->graph->source(e) : this->graph->target(e)); } |
729 Node head(Edge e) const { |
729 Node target(Edge e) const { |
730 return ((e.forward) ? this->graph->head(e) : this->graph->tail(e)); } |
730 return ((e.forward) ? this->graph->target(e) : this->graph->source(e)); } |
731 |
731 |
732 Node aNode(OutEdgeIt e) const { |
732 Node aNode(OutEdgeIt e) const { |
733 return ((e.forward) ? this->graph->aNode(e.out) : |
733 return ((e.forward) ? this->graph->aNode(e.out) : |
734 this->graph->aNode(e.in)); } |
734 this->graph->aNode(e.in)); } |
735 Node bNode(OutEdgeIt e) const { |
735 Node bNode(OutEdgeIt e) const { |
911 return Node(this->graph->bNode(e.e)); } |
911 return Node(this->graph->bNode(e.e)); } |
912 |
912 |
913 void erase(const OutEdgeIt& e) const { |
913 void erase(const OutEdgeIt& e) const { |
914 OutEdgeIt f=e; |
914 OutEdgeIt f=e; |
915 this->next(f); |
915 this->next(f); |
916 first_out_edges->set(this->tail(e), f.e); |
916 first_out_edges->set(this->source(e), f.e); |
917 } |
917 } |
918 }; |
918 }; |
919 |
919 |
920 /// A wrapper for composing a bipartite graph. |
920 /// A wrapper for composing a bipartite graph. |
921 /// \c _graph have to be a reference to a graph of type \c Graph |
921 /// \c _graph have to be a reference to a graph of type \c Graph |
1039 // this->s_false_t_true_map->next(n); return n; |
1039 // this->s_false_t_true_map->next(n); return n; |
1040 // } |
1040 // } |
1041 OutEdgeIt& next(OutEdgeIt& i) const { this->graph->next(i.e); return i; } |
1041 OutEdgeIt& next(OutEdgeIt& i) const { this->graph->next(i.e); return i; } |
1042 InEdgeIt& next(InEdgeIt& i) const { this->graph->next(i.e); return i; } |
1042 InEdgeIt& next(InEdgeIt& i) const { this->graph->next(i.e); return i; } |
1043 |
1043 |
1044 Node tail(const Edge& e) { |
1044 Node source(const Edge& e) { |
1045 if (!(*(this->s_false_t_true_map))[this->graph->tail(e)]) |
1045 if (!(*(this->s_false_t_true_map))[this->graph->source(e)]) |
1046 return Node(this->graph->tail(e)); |
1046 return Node(this->graph->source(e)); |
1047 else |
1047 else |
1048 return Node(this->graph->head(e)); |
1048 return Node(this->graph->target(e)); |
1049 } |
1049 } |
1050 Node head(const Edge& e) { |
1050 Node target(const Edge& e) { |
1051 if (!(*(this->s_false_t_true_map))[this->graph->tail(e)]) |
1051 if (!(*(this->s_false_t_true_map))[this->graph->source(e)]) |
1052 return Node(this->graph->head(e)); |
1052 return Node(this->graph->target(e)); |
1053 else |
1053 else |
1054 return Node(this->graph->tail(e)); |
1054 return Node(this->graph->source(e)); |
1055 } |
1055 } |
1056 |
1056 |
1057 Node aNode(const OutEdgeIt& e) const { |
1057 Node aNode(const OutEdgeIt& e) const { |
1058 return Node(this->graph->aNode(e.e)); |
1058 return Node(this->graph->aNode(e.e)); |
1059 } |
1059 } |
1504 int nodeNum() const { return this->graph->nodeNum()+2; } |
1504 int nodeNum() const { return this->graph->nodeNum()+2; } |
1505 int edgeNum() const { |
1505 int edgeNum() const { |
1506 return this->graph->edgeNum()+this->graph->nodeNum(); |
1506 return this->graph->edgeNum()+this->graph->nodeNum(); |
1507 } |
1507 } |
1508 |
1508 |
1509 Node aNode(const OutEdgeIt& e) const { return tail(e); } |
1509 Node aNode(const OutEdgeIt& e) const { return source(e); } |
1510 Node aNode(const InEdgeIt& e) const { return head(e); } |
1510 Node aNode(const InEdgeIt& e) const { return target(e); } |
1511 Node bNode(const OutEdgeIt& e) const { return head(e); } |
1511 Node bNode(const OutEdgeIt& e) const { return target(e); } |
1512 Node bNode(const InEdgeIt& e) const { return tail(e); } |
1512 Node bNode(const InEdgeIt& e) const { return source(e); } |
1513 |
1513 |
1514 void addNode() const { } |
1514 void addNode() const { } |
1515 void addEdge() const { } |
1515 void addEdge() const { } |
1516 |
1516 |
1517 // Node addNode() const { return Node(this->graph->addNode()); } |
1517 // Node addNode() const { return Node(this->graph->addNode()); } |
1518 // Edge addEdge(const Node& tail, const Node& head) const { |
1518 // Edge addEdge(const Node& source, const Node& target) const { |
1519 // return Edge(this->graph->addEdge(tail, head)); } |
1519 // return Edge(this->graph->addEdge(source, target)); } |
1520 |
1520 |
1521 // void erase(const Node& i) const { this->graph->erase(i); } |
1521 // void erase(const Node& i) const { this->graph->erase(i); } |
1522 // void erase(const Edge& i) const { this->graph->erase(i); } |
1522 // void erase(const Edge& i) const { this->graph->erase(i); } |
1523 |
1523 |
1524 // void clear() const { this->graph->clear(); } |
1524 // void clear() const { this->graph->clear(); } |