src/work/marci/experiment/graph_wrapper.h
changeset 1262 61f989e3e525
parent 921 818510fa3d99
equal deleted inserted replaced
2:0b0c68d7649b 3:0bb66070661f
    94       It e; first(e); return e; }
    94       It e; first(e); return e; }
    95 
    95 
    96     template< typename It > It first(const Node& v) const { 
    96     template< typename It > It first(const Node& v) const { 
    97       It e; first(e, v); return e; }
    97       It e; first(e, v); return e; }
    98 
    98 
    99     Node head(const Edge& e) const { return graph->head(e); }
    99     Node target(const Edge& e) const { return graph->target(e); }
   100     Node tail(const Edge& e) const { return graph->tail(e); }
   100     Node source(const Edge& e) const { return graph->source(e); }
   101 
   101 
   102     template<typename I> bool valid(const I& i) const 
   102     template<typename I> bool valid(const I& i) const 
   103       { return graph->valid(i); }
   103       { return graph->valid(i); }
   104   
   104   
   105     //template<typename I> void setInvalid(const I &i);
   105     //template<typename I> void setInvalid(const I &i);
   112       return graph->aNode(e); }
   112       return graph->aNode(e); }
   113     template<typename I> Node bNode(const I& e) const { 
   113     template<typename I> Node bNode(const I& e) const { 
   114       return graph->bNode(e); }
   114       return graph->bNode(e); }
   115   
   115   
   116     Node addNode() const { return graph->addNode(); }
   116     Node addNode() const { return graph->addNode(); }
   117     Edge addEdge(const Node& tail, const Node& head) const { 
   117     Edge addEdge(const Node& source, const Node& target) const { 
   118       return graph->addEdge(tail, head); }
   118       return graph->addEdge(source, target); }
   119   
   119   
   120     template<typename I> void erase(const I& i) const { graph->erase(i); }
   120     template<typename I> void erase(const I& i) const { graph->erase(i); }
   121   
   121   
   122     void clear() const { graph->clear(); }
   122     void clear() const { graph->clear(); }
   123     
   123     
   243       It e; this->first(e); return e; }
   243       It e; this->first(e); return e; }
   244 
   244 
   245     template< typename It > It first(const Node& v) const { 
   245     template< typename It > It first(const Node& v) const { 
   246       It e; this->first(e, v); return e; }
   246       It e; this->first(e, v); return e; }
   247 
   247 
   248     Node head(const Edge& e) const { return gw.head(e); }
   248     Node target(const Edge& e) const { return gw.target(e); }
   249     Node tail(const Edge& e) const { return gw.tail(e); }
   249     Node source(const Edge& e) const { return gw.source(e); }
   250 
   250 
   251     template<typename I> bool valid(const I& i) const { return gw.valid(i); }
   251     template<typename I> bool valid(const I& i) const { return gw.valid(i); }
   252   
   252   
   253     //template<typename I> void setInvalid(const I &i);
   253     //template<typename I> void setInvalid(const I &i);
   254     //{ return graph->setInvalid(i); }
   254     //{ return graph->setInvalid(i); }
   258   
   258   
   259     template<typename I> Node aNode(const I& e) const { return gw.aNode(e); }
   259     template<typename I> Node aNode(const I& e) const { return gw.aNode(e); }
   260     template<typename I> Node bNode(const I& e) const { return gw.bNode(e); }
   260     template<typename I> Node bNode(const I& e) const { return gw.bNode(e); }
   261   
   261   
   262     Node addNode() const { return gw.addNode(); }
   262     Node addNode() const { return gw.addNode(); }
   263     Edge addEdge(const Node& tail, const Node& head) const { 
   263     Edge addEdge(const Node& source, const Node& target) const { 
   264       return gw.addEdge(tail, head); }
   264       return gw.addEdge(source, target); }
   265   
   265   
   266     template<typename I> void erase(const I& i) const { gw.erase(i); }
   266     template<typename I> void erase(const I& i) const { gw.erase(i); }
   267   
   267   
   268     void clear() const { gw.clear(); }
   268     void clear() const { gw.clear(); }
   269     
   269     
   320 //       It e; first(e); return e; }
   320 //       It e; first(e); return e; }
   321 
   321 
   322 //     template< typename It > It first(const Node& v) const { 
   322 //     template< typename It > It first(const Node& v) const { 
   323 //       It e; first(e, v); return e; }
   323 //       It e; first(e, v); return e; }
   324 
   324 
   325 //     Node head(const Edge& e) const { return graph->tail(e); }
   325 //     Node target(const Edge& e) const { return graph->source(e); }
   326 //     Node tail(const Edge& e) const { return graph->head(e); }
   326 //     Node source(const Edge& e) const { return graph->target(e); }
   327   
   327   
   328 //     template<typename I> bool valid(const I& i) const 
   328 //     template<typename I> bool valid(const I& i) const 
   329 //       { return graph->valid(i); }
   329 //       { return graph->valid(i); }
   330   
   330   
   331 //     //template<typename I> void setInvalid(const I &i);
   331 //     //template<typename I> void setInvalid(const I &i);
   335 //       return graph->aNode(e); }
   335 //       return graph->aNode(e); }
   336 //     template<typename I> Node bNode(const I& e) const { 
   336 //     template<typename I> Node bNode(const I& e) const { 
   337 //       return graph->bNode(e); }
   337 //       return graph->bNode(e); }
   338 
   338 
   339 //     Node addNode() const { return graph->addNode(); }
   339 //     Node addNode() const { return graph->addNode(); }
   340 //     Edge addEdge(const Node& tail, const Node& head) const { 
   340 //     Edge addEdge(const Node& source, const Node& target) const { 
   341 //       return graph->addEdge(tail, head); }
   341 //       return graph->addEdge(source, target); }
   342   
   342   
   343 //     int nodeNum() const { return graph->nodeNum(); }
   343 //     int nodeNum() const { return graph->nodeNum(); }
   344 //     int edgeNum() const { return graph->edgeNum(); }
   344 //     int edgeNum() const { return graph->edgeNum(); }
   345   
   345   
   346 //     template<typename I> void erase(const I& i) const { graph->erase(i); }
   346 //     template<typename I> void erase(const I& i) const { graph->erase(i); }
   401 //     //  It e; first(e); return e; }
   401 //     //  It e; first(e); return e; }
   402 
   402 
   403 //     //template< typename It > It first(const Node& v) const { 
   403 //     //template< typename It > It first(const Node& v) const { 
   404 //     //  It e; first(e, v); return e; }
   404 //     //  It e; first(e, v); return e; }
   405 
   405 
   406 //     //Node head(const Edge& e) const { return graph->tail(e); }
   406 //     //Node target(const Edge& e) const { return graph->source(e); }
   407 //     //Node tail(const Edge& e) const { return graph->head(e); }
   407 //     //Node source(const Edge& e) const { return graph->target(e); }
   408   
   408   
   409 //     //template<typename I> bool valid(const I& i) const 
   409 //     //template<typename I> bool valid(const I& i) const 
   410 //     //  { return graph->valid(i); }
   410 //     //  { return graph->valid(i); }
   411   
   411   
   412 //     //template<typename I> void setInvalid(const I &i);
   412 //     //template<typename I> void setInvalid(const I &i);
   416 //     //  return graph->aNode(e); }
   416 //     //  return graph->aNode(e); }
   417 //     //template<typename I> Node bNode(const I& e) const { 
   417 //     //template<typename I> Node bNode(const I& e) const { 
   418 //     //  return graph->bNode(e); }
   418 //     //  return graph->bNode(e); }
   419 
   419 
   420 //     //Node addNode() const { return graph->addNode(); }
   420 //     //Node addNode() const { return graph->addNode(); }
   421 //     //Edge addEdge(const Node& tail, const Node& head) const { 
   421 //     //Edge addEdge(const Node& source, const Node& target) const { 
   422 //     //  return graph->addEdge(tail, head); }
   422 //     //  return graph->addEdge(source, target); }
   423   
   423   
   424 //     //int nodeNum() const { return graph->nodeNum(); }
   424 //     //int nodeNum() const { return graph->nodeNum(); }
   425 //     //int edgeNum() const { return graph->edgeNum(); }
   425 //     //int edgeNum() const { return graph->edgeNum(); }
   426   
   426   
   427 //     //template<typename I> void erase(const I& i) const { graph->erase(i); }
   427 //     //template<typename I> void erase(const I& i) const { graph->erase(i); }
   465     typedef typename GraphWrapper<GraphWrapper>::InEdgeIt OutEdgeIt;
   465     typedef typename GraphWrapper<GraphWrapper>::InEdgeIt OutEdgeIt;
   466 
   466 
   467     RevGraphWrapper(GraphWrapper _gw) : 
   467     RevGraphWrapper(GraphWrapper _gw) : 
   468       GraphWrapper<GraphWrapper>(_gw) { }  
   468       GraphWrapper<GraphWrapper>(_gw) { }  
   469 
   469 
   470     Node head(const Edge& e) const 
   470     Node target(const Edge& e) const 
   471       { return GraphWrapper<GraphWrapper>::tail(e); }
   471       { return GraphWrapper<GraphWrapper>::source(e); }
   472     Node tail(const Edge& e) const 
   472     Node source(const Edge& e) const 
   473       { return GraphWrapper<GraphWrapper>::head(e); }
   473       { return GraphWrapper<GraphWrapper>::target(e); }
   474   };
   474   };
   475 
   475 
   476   //Subgraph on the same node-set and partial edge-set
   476   //Subgraph on the same node-set and partial edge-set
   477   template<typename GraphWrapper, typename EdgeFilterMap>
   477   template<typename GraphWrapper, typename EdgeFilterMap>
   478   class SubGraphWrapper : public GraphWrapper<GraphWrapper> {
   478   class SubGraphWrapper : public GraphWrapper<GraphWrapper> {
   597 //       return e;
   597 //       return e;
   598 //     }
   598 //     }
   599 
   599 
   600 //     OutEdgeIt& next(OutEdgeIt& e) const {
   600 //     OutEdgeIt& next(OutEdgeIt& e) const {
   601 //       if (e.out_or_in) {
   601 //       if (e.out_or_in) {
   602 // 	Node n=gw.tail(e.out);
   602 // 	Node n=gw.source(e.out);
   603 // 	gw.next(e.out);
   603 // 	gw.next(e.out);
   604 // 	if (!gw.valid(e.out)) {
   604 // 	if (!gw.valid(e.out)) {
   605 // 	  e.out_or_in=false;
   605 // 	  e.out_or_in=false;
   606 // 	  gw.first(e.in, n);
   606 // 	  gw.first(e.in, n);
   607 // 	}
   607 // 	}
   610 //       }
   610 //       }
   611 //       return e;
   611 //       return e;
   612 //     }
   612 //     }
   613 
   613 
   614 //     Node aNode(const OutEdgeIt& e) const { 
   614 //     Node aNode(const OutEdgeIt& e) const { 
   615 //       if (e.out_or_in) return gw.tail(e); else return gw.head(e); }
   615 //       if (e.out_or_in) return gw.source(e); else return gw.target(e); }
   616 //     Node bNode(const OutEdgeIt& e) const { 
   616 //     Node bNode(const OutEdgeIt& e) const { 
   617 //       if (e.out_or_in) return gw.head(e); else return gw.tail(e); }
   617 //       if (e.out_or_in) return gw.target(e); else return gw.source(e); }
   618 
   618 
   619 //     typedef OutEdgeIt InEdgeIt; 
   619 //     typedef OutEdgeIt InEdgeIt; 
   620 
   620 
   621 //     template<typename I> I& first(I& i) const { return gw.first(i); }
   621 //     template<typename I> I& first(I& i) const { return gw.first(i); }
   622 // //     template<typename I, typename P> I& first(I& i, const P& p) const { 
   622 // //     template<typename I, typename P> I& first(I& i, const P& p) const { 
   630 //       It e; first(e); return e; }
   630 //       It e; first(e); return e; }
   631 
   631 
   632 //     template< typename It > It first(const Node& v) const { 
   632 //     template< typename It > It first(const Node& v) const { 
   633 //       It e; first(e, v); return e; }
   633 //       It e; first(e, v); return e; }
   634 
   634 
   635 //     Node head(const Edge& e) const { return gw.head(e); }
   635 //     Node target(const Edge& e) const { return gw.target(e); }
   636 //     Node tail(const Edge& e) const { return gw.tail(e); }
   636 //     Node source(const Edge& e) const { return gw.source(e); }
   637 
   637 
   638 //     template<typename I> bool valid(const I& i) const 
   638 //     template<typename I> bool valid(const I& i) const 
   639 //       { return gw.valid(i); }
   639 //       { return gw.valid(i); }
   640   
   640   
   641 //     //template<typename I> void setInvalid(const I &i);
   641 //     //template<typename I> void setInvalid(const I &i);
   649 // //     template<typename I> Node bNode(const I& e) const { 
   649 // //     template<typename I> Node bNode(const I& e) const { 
   650 // //       return graph->bNode(e); }
   650 // //       return graph->bNode(e); }
   651   
   651   
   652 //     Node addNode() const { return gw.addNode(); }
   652 //     Node addNode() const { return gw.addNode(); }
   653 // // FIXME: ez igy nem jo, mert nem
   653 // // FIXME: ez igy nem jo, mert nem
   654 // //    Edge addEdge(const Node& tail, const Node& head) const { 
   654 // //    Edge addEdge(const Node& source, const Node& target) const { 
   655 // //      return graph->addEdge(tail, head); }
   655 // //      return graph->addEdge(source, target); }
   656   
   656   
   657 //     template<typename I> void erase(const I& i) const { gw.erase(i); }
   657 //     template<typename I> void erase(const I& i) const { gw.erase(i); }
   658   
   658   
   659 //     void clear() const { gw.clear(); }
   659 //     void clear() const { gw.clear(); }
   660     
   660     
   796     template<typename I, typename P> I& first(I& i, const P& p) const { 
   796     template<typename I, typename P> I& first(I& i, const P& p) const { 
   797       gw.first(i, p); return i; }
   797       gw.first(i, p); return i; }
   798 
   798 
   799     OutEdgeIt& next(OutEdgeIt& e) const {
   799     OutEdgeIt& next(OutEdgeIt& e) const {
   800       if (e.out_or_in) {
   800       if (e.out_or_in) {
   801 	Node n=gw.tail(e.out);
   801 	Node n=gw.source(e.out);
   802 	gw.next(e.out);
   802 	gw.next(e.out);
   803 	if (!gw.valid(e.out)) { e.out_or_in=false; gw.first(e.in, n); }
   803 	if (!gw.valid(e.out)) { e.out_or_in=false; gw.first(e.in, n); }
   804       } else {
   804       } else {
   805 	gw.next(e.in);
   805 	gw.next(e.in);
   806       }
   806       }
   807       return e;
   807       return e;
   808     }
   808     }
   809 
   809 
   810     EdgeIt& next(EdgeIt& e) const {
   810     EdgeIt& next(EdgeIt& e) const {
   811       //NodeIt v=tail(e);
   811       //NodeIt v=source(e);
   812       gw.next(e.out);
   812       gw.next(e.out);
   813       while (valid(e.v) && !gw.valid(e.out)) { 
   813       while (valid(e.v) && !gw.valid(e.out)) { 
   814 	next(e.v); 
   814 	next(e.v); 
   815 	if (valid(e.v)) gw.first(e.out, e.v); 
   815 	if (valid(e.v)) gw.first(e.out, e.v); 
   816       }
   816       }
   824       It e; first(e); return e; }
   824       It e; first(e); return e; }
   825 
   825 
   826     template< typename It > It first(const Node& v) const { 
   826     template< typename It > It first(const Node& v) const { 
   827       It e; first(e, v); return e; }
   827       It e; first(e, v); return e; }
   828 
   828 
   829 //    Node head(const Edge& e) const { return gw.head(e); }
   829 //    Node target(const Edge& e) const { return gw.target(e); }
   830 //    Node tail(const Edge& e) const { return gw.tail(e); }
   830 //    Node source(const Edge& e) const { return gw.source(e); }
   831 
   831 
   832 //    template<typename I> bool valid(const I& i) const 
   832 //    template<typename I> bool valid(const I& i) const 
   833 //      { return gw.valid(i); }
   833 //      { return gw.valid(i); }
   834   
   834   
   835 //    int nodeNum() const { return gw.nodeNum(); }
   835 //    int nodeNum() const { return gw.nodeNum(); }
   839 //       return graph->aNode(e); }
   839 //       return graph->aNode(e); }
   840 //     template<typename I> Node bNode(const I& e) const { 
   840 //     template<typename I> Node bNode(const I& e) const { 
   841 //       return graph->bNode(e); }
   841 //       return graph->bNode(e); }
   842 
   842 
   843     Node aNode(const OutEdgeIt& e) const { 
   843     Node aNode(const OutEdgeIt& e) const { 
   844       if (e.out_or_in) return gw.tail(e); else return gw.head(e); }
   844       if (e.out_or_in) return gw.source(e); else return gw.target(e); }
   845     Node bNode(const OutEdgeIt& e) const { 
   845     Node bNode(const OutEdgeIt& e) const { 
   846       if (e.out_or_in) return gw.head(e); else return gw.tail(e); }
   846       if (e.out_or_in) return gw.target(e); else return gw.source(e); }
   847   
   847   
   848 //    Node addNode() const { return gw.addNode(); }
   848 //    Node addNode() const { return gw.addNode(); }
   849 
   849 
   850 // FIXME: ez igy nem jo, mert nem
   850 // FIXME: ez igy nem jo, mert nem
   851 //    Edge addEdge(const Node& tail, const Node& head) const { 
   851 //    Edge addEdge(const Node& source, const Node& target) const { 
   852 //      return graph->addEdge(tail, head); }
   852 //      return graph->addEdge(source, target); }
   853   
   853   
   854 //    template<typename I> void erase(const I& i) const { gw.erase(i); }
   854 //    template<typename I> void erase(const I& i) const { gw.erase(i); }
   855   
   855   
   856 //    void clear() const { gw.clear(); }
   856 //    void clear() const { gw.clear(); }
   857     
   857     
   911 //       It e; first(e); return e; }
   911 //       It e; first(e); return e; }
   912 
   912 
   913 //     template< typename It > It first(Node v) const { 
   913 //     template< typename It > It first(Node v) const { 
   914 //       It e; first(e, v); return e; }
   914 //       It e; first(e, v); return e; }
   915 
   915 
   916 //     Node head(const Edge& e) const { return graph->head(e); }
   916 //     Node target(const Edge& e) const { return graph->target(e); }
   917 //     Node tail(const Edge& e) const { return graph->tail(e); }
   917 //     Node source(const Edge& e) const { return graph->source(e); }
   918   
   918   
   919 //     template<typename I> Node aNode(const I& e) const { 
   919 //     template<typename I> Node aNode(const I& e) const { 
   920 //       return graph->aNode(e); }
   920 //       return graph->aNode(e); }
   921 //     template<typename I> Node bNode(const I& e) const { 
   921 //     template<typename I> Node bNode(const I& e) const { 
   922 //       return graph->bNode(e); }
   922 //       return graph->bNode(e); }
   926   
   926   
   927 //     //template<typename I> void setInvalid(const I &i);
   927 //     //template<typename I> void setInvalid(const I &i);
   928 //     //{ return graph->setInvalid(i); }
   928 //     //{ return graph->setInvalid(i); }
   929   
   929   
   930 //     Node addNode() { return graph->addNode(); }
   930 //     Node addNode() { return graph->addNode(); }
   931 //     Edge addEdge(const Node& tail, const Node& head) { 
   931 //     Edge addEdge(const Node& source, const Node& target) { 
   932 //       return graph->addEdge(tail, head); }
   932 //       return graph->addEdge(source, target); }
   933   
   933   
   934 //     template<typename I> void erase(const I& i) { graph->erase(i); }
   934 //     template<typename I> void erase(const I& i) { graph->erase(i); }
   935   
   935   
   936 //     void clear() { graph->clear(); }
   936 //     void clear() { graph->clear(); }
   937   
   937   
  1178       It e;
  1178       It e;
  1179       first(e, v);
  1179       first(e, v);
  1180       return e; 
  1180       return e; 
  1181     }
  1181     }
  1182 
  1182 
  1183     Node tail(Edge e) const { 
  1183     Node source(Edge e) const { 
  1184       return ((e.out_or_in) ? gw.aNode(e.out) : gw.aNode(e.in)); }
  1184       return ((e.out_or_in) ? gw.aNode(e.out) : gw.aNode(e.in)); }
  1185     Node head(Edge e) const { 
  1185     Node target(Edge e) const { 
  1186       return ((e.out_or_in) ? gw.bNode(e.out) : gw.bNode(e.in)); }
  1186       return ((e.out_or_in) ? gw.bNode(e.out) : gw.bNode(e.in)); }
  1187 
  1187 
  1188     Node aNode(OutEdgeIt e) const { 
  1188     Node aNode(OutEdgeIt e) const { 
  1189       return ((e.out_or_in) ? gw.aNode(e.out) : gw.aNode(e.in)); }
  1189       return ((e.out_or_in) ? gw.aNode(e.out) : gw.aNode(e.in)); }
  1190     Node bNode(OutEdgeIt e) const { 
  1190     Node bNode(OutEdgeIt e) const { 
  1309       It e; this->first(e, v); return e; }
  1309       It e; this->first(e, v); return e; }
  1310 
  1310 
  1311     void erase(const OutEdgeIt& e) const {
  1311     void erase(const OutEdgeIt& e) const {
  1312       OutEdgeIt f=e;
  1312       OutEdgeIt f=e;
  1313       this->next(f);
  1313       this->next(f);
  1314       first_out_edges->set(this->tail(e), f);
  1314       first_out_edges->set(this->source(e), f);
  1315     }
  1315     }
  1316   };
  1316   };
  1317 
  1317 
  1318 //   template<typename Graph, typename Number, typename FlowMap, typename CapacityMap>
  1318 //   template<typename Graph, typename Number, typename FlowMap, typename CapacityMap>
  1319 //   class ErasingResGraphWrapper : public ResGraphWrapper<Graph, Number, FlowMap, CapacityMap> {
  1319 //   class ErasingResGraphWrapper : public ResGraphWrapper<Graph, Number, FlowMap, CapacityMap> {
  1379 //       It e; first(e); return e; }
  1379 //       It e; first(e); return e; }
  1380 
  1380 
  1381 //     template< typename It > It first(const Node& v) const { 
  1381 //     template< typename It > It first(const Node& v) const { 
  1382 //       It e; first(e, v); return e; }
  1382 //       It e; first(e, v); return e; }
  1383 
  1383 
  1384 //     //Node head(const Edge& e) const { return gw.head(e); }
  1384 //     //Node target(const Edge& e) const { return gw.target(e); }
  1385 //     //Node tail(const Edge& e) const { return gw.tail(e); }
  1385 //     //Node source(const Edge& e) const { return gw.source(e); }
  1386 
  1386 
  1387 //     //template<typename I> bool valid(const I& i) const 
  1387 //     //template<typename I> bool valid(const I& i) const 
  1388 //     //  { return gw.valid(i); }
  1388 //     //  { return gw.valid(i); }
  1389   
  1389   
  1390 //     //int nodeNum() const { return gw.nodeNum(); }
  1390 //     //int nodeNum() const { return gw.nodeNum(); }
  1394 //     //  return gw.aNode(e); }
  1394 //     //  return gw.aNode(e); }
  1395 //     //template<typename I> Node bNode(const I& e) const { 
  1395 //     //template<typename I> Node bNode(const I& e) const { 
  1396 //     //  return gw.bNode(e); }
  1396 //     //  return gw.bNode(e); }
  1397   
  1397   
  1398 //     //Node addNode() const { return gw.addNode(); }
  1398 //     //Node addNode() const { return gw.addNode(); }
  1399 //     //Edge addEdge(const Node& tail, const Node& head) const { 
  1399 //     //Edge addEdge(const Node& source, const Node& target) const { 
  1400 //     //  return gw.addEdge(tail, head); }
  1400 //     //  return gw.addEdge(source, target); }
  1401   
  1401   
  1402 //     //void erase(const OutEdgeIt& e) {
  1402 //     //void erase(const OutEdgeIt& e) {
  1403 //     //  first_out_edge(this->tail(e))=e;
  1403 //     //  first_out_edge(this->source(e))=e;
  1404 //     //}
  1404 //     //}
  1405 //     void erase(const Edge& e) {
  1405 //     void erase(const Edge& e) {
  1406 //       OutEdgeIt f(e);
  1406 //       OutEdgeIt f(e);
  1407 //       next(f);
  1407 //       next(f);
  1408 //       first_out_edges.set(this->tail(e), f);
  1408 //       first_out_edges.set(this->source(e), f);
  1409 //     }
  1409 //     }
  1410 //     //template<typename I> void erase(const I& i) const { gw.erase(i); }
  1410 //     //template<typename I> void erase(const I& i) const { gw.erase(i); }
  1411   
  1411   
  1412 //     //void clear() const { gw.clear(); }
  1412 //     //void clear() const { gw.clear(); }
  1413     
  1413     
  1457 //       ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>(_G, _flow, _capacity), dist(*this, gw.nodeNum()) { 
  1457 //       ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>(_G, _flow, _capacity), dist(*this, gw.nodeNum()) { 
  1458 //     }
  1458 //     }
  1459 
  1459 
  1460 //     OutEdgeIt& first(OutEdgeIt& e, const Node& n) const {
  1460 //     OutEdgeIt& first(OutEdgeIt& e, const Node& n) const {
  1461 //       ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::first(e, n);
  1461 //       ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::first(e, n);
  1462 //       while (valid(e) && (dist.get(tail(e))/*+1!=*/>=dist.get(head(e)))) 
  1462 //       while (valid(e) && (dist.get(source(e))/*+1!=*/>=dist.get(target(e)))) 
  1463 // 	ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(e);
  1463 // 	ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(e);
  1464 //       return e;
  1464 //       return e;
  1465 //     }
  1465 //     }
  1466 
  1466 
  1467 //     NodeIt& next(NodeIt& e) const {
  1467 //     NodeIt& next(NodeIt& e) const {
  1468 //       return ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(e);
  1468 //       return ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(e);
  1469 //     }
  1469 //     }
  1470 
  1470 
  1471 //     OutEdgeIt& next(OutEdgeIt& e) const {
  1471 //     OutEdgeIt& next(OutEdgeIt& e) const {
  1472 //       ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(e);
  1472 //       ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(e);
  1473 //       while (valid(e) && (dist.get(tail(e))/*+1!*/>=dist.get(head(e)))) 
  1473 //       while (valid(e) && (dist.get(source(e))/*+1!*/>=dist.get(target(e)))) 
  1474 // 	ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(e);
  1474 // 	ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(e);
  1475 //       return e;
  1475 //       return e;
  1476 //     }
  1476 //     }
  1477 
  1477 
  1478 //     NodeIt& first(NodeIt& n) const {
  1478 //     NodeIt& first(NodeIt& n) const {
  1480 //     }
  1480 //     }
  1481 
  1481 
  1482 //     void erase(const Edge& e) {
  1482 //     void erase(const Edge& e) {
  1483 //       OutEdgeIt f(e);
  1483 //       OutEdgeIt f(e);
  1484 //       ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(f);
  1484 //       ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(f);
  1485 //       while (valid(f) && (dist.get(tail(f))/*+1!=*/>=dist.get(head(f)))) 
  1485 //       while (valid(f) && (dist.get(source(f))/*+1!=*/>=dist.get(target(f)))) 
  1486 // 	ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(f);
  1486 // 	ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(f);
  1487 //       first_out_edges.set(this->tail(e), f);
  1487 //       first_out_edges.set(this->source(e), f);
  1488 //     }
  1488 //     }
  1489 
  1489 
  1490 //     //TrivGraphWrapper() : graph(0) { }
  1490 //     //TrivGraphWrapper() : graph(0) { }
  1491 //     //TrivGraphWrapper(Graph& _graph) : graph(&_graph) { }
  1491 //     //TrivGraphWrapper(Graph& _graph) : graph(&_graph) { }
  1492 
  1492 
  1505 //       It e; first(e); return e; }
  1505 //       It e; first(e); return e; }
  1506 
  1506 
  1507 //     template< typename It > It first(const Node& v) const { 
  1507 //     template< typename It > It first(const Node& v) const { 
  1508 //       It e; first(e, v); return e; }
  1508 //       It e; first(e, v); return e; }
  1509 
  1509 
  1510 //     //Node head(const Edge& e) const { return gw.head(e); }
  1510 //     //Node target(const Edge& e) const { return gw.target(e); }
  1511 //     //Node tail(const Edge& e) const { return gw.tail(e); }
  1511 //     //Node source(const Edge& e) const { return gw.source(e); }
  1512 
  1512 
  1513 //     //template<typename I> bool valid(const I& i) const 
  1513 //     //template<typename I> bool valid(const I& i) const 
  1514 //     //  { return gw.valid(i); }
  1514 //     //  { return gw.valid(i); }
  1515   
  1515   
  1516 //     //template<typename I> void setInvalid(const I &i);
  1516 //     //template<typename I> void setInvalid(const I &i);
  1523 //     //  return gw.aNode(e); }
  1523 //     //  return gw.aNode(e); }
  1524 //     //template<typename I> Node bNode(const I& e) const { 
  1524 //     //template<typename I> Node bNode(const I& e) const { 
  1525 //     //  return gw.bNode(e); }
  1525 //     //  return gw.bNode(e); }
  1526   
  1526   
  1527 //     //Node addNode() const { return gw.addNode(); }
  1527 //     //Node addNode() const { return gw.addNode(); }
  1528 //     //Edge addEdge(const Node& tail, const Node& head) const { 
  1528 //     //Edge addEdge(const Node& source, const Node& target) const { 
  1529 //     //  return gw.addEdge(tail, head); }
  1529 //     //  return gw.addEdge(source, target); }
  1530   
  1530   
  1531 //     //template<typename I> void erase(const I& i) const { gw.erase(i); }
  1531 //     //template<typename I> void erase(const I& i) const { gw.erase(i); }
  1532   
  1532   
  1533 //     //void clear() const { gw.clear(); }
  1533 //     //void clear() const { gw.clear(); }
  1534     
  1534     
  1667 //       It e; first(e); return e; }
  1667 //       It e; first(e); return e; }
  1668 
  1668 
  1669 //     template< typename It > It first(Node v) const { 
  1669 //     template< typename It > It first(Node v) const { 
  1670 //       It e; first(e, v); return e; }
  1670 //       It e; first(e, v); return e; }
  1671 
  1671 
  1672 //     Node head(const Edge& e) const { return gw.head(e); }
  1672 //     Node target(const Edge& e) const { return gw.target(e); }
  1673 //     Node tail(const Edge& e) const { return gw.tail(e); }
  1673 //     Node source(const Edge& e) const { return gw.source(e); }
  1674   
  1674   
  1675 //     template<typename I> Node aNode(const I& e) const { 
  1675 //     template<typename I> Node aNode(const I& e) const { 
  1676 //       return gw.aNode(e); }
  1676 //       return gw.aNode(e); }
  1677 //     template<typename I> Node bNode(const I& e) const { 
  1677 //     template<typename I> Node bNode(const I& e) const { 
  1678 //       return gw.bNode(e); }
  1678 //       return gw.bNode(e); }
  1682   
  1682   
  1683 //     //template<typename I> void setInvalid(const I &i);
  1683 //     //template<typename I> void setInvalid(const I &i);
  1684 //     //{ return gw.setInvalid(i); }
  1684 //     //{ return gw.setInvalid(i); }
  1685   
  1685   
  1686 //     Node addNode() { return gw.addNode(); }
  1686 //     Node addNode() { return gw.addNode(); }
  1687 //     Edge addEdge(const Node& tail, const Node& head) { 
  1687 //     Edge addEdge(const Node& source, const Node& target) { 
  1688 //       return gw.addEdge(tail, head); }
  1688 //       return gw.addEdge(source, target); }
  1689   
  1689   
  1690 //     template<typename I> void erase(const I& i) { gw.erase(i); }
  1690 //     template<typename I> void erase(const I& i) { gw.erase(i); }
  1691   
  1691   
  1692 //     void clear() { gw.clear(); }
  1692 //     void clear() { gw.clear(); }
  1693   
  1693