# HG changeset patch # User marci # Date 1082819957 0 # Node ID 4535f78639e2a39cec96de1649ea0b1caf18bdbe # Parent b8d635e1672df30e23b7765420a0c969b7b111e6 misc diff -r b8d635e1672d -r 4535f78639e2 src/work/makefile --- a/src/work/makefile Sat Apr 24 14:25:03 2004 +0000 +++ b/src/work/makefile Sat Apr 24 15:19:17 2004 +0000 @@ -1,12 +1,12 @@ INCLUDEDIRS ?= -I../include -I. -I./{marci,jacint,alpar,klao,akos} -CXXFLAGS = -g -O3 -W -Wall $(INCLUDEDIRS) -ansi -pedantic +CXXFLAGS = -g -O0 -W -Wall $(INCLUDEDIRS) -ansi -pedantic BINARIES ?= bin_heap_demo # Hat, ez elismerem, hogy nagyon ronda, de mukodik minden altalam # ismert rendszeren :-) (Misi) -CXX := $(shell type -p g++-3.4 || type -p g++-3.3 || type -p g++-3.2 || type -p g++-3.0 || type -p g++-3 || echo g++) -#CXX := $(shell type -p g++-3.3 || type -p g++-3.2 || type -p g++-3.0 || type -p g++-3 || echo g++) +#CXX := $(shell type -p g++-3.4 || type -p g++-3.3 || type -p g++-3.2 || type -p g++-3.0 || type -p g++-3 || echo g++) +CXX := $(shell type -p g++-3.3 || type -p g++-3.2 || type -p g++-3.0 || type -p g++-3 || echo g++) CC := $(CXX) diff -r b8d635e1672d -r 4535f78639e2 src/work/marci/bipartite_graph_wrapper_test.cc --- a/src/work/marci/bipartite_graph_wrapper_test.cc Sat Apr 24 14:25:03 2004 +0000 +++ b/src/work/marci/bipartite_graph_wrapper_test.cc Sat Apr 24 15:19:17 2004 +0000 @@ -72,6 +72,9 @@ MaxFlow, stGW::EdgeMap > max_flow_test(stgw, stgw.S_NODE, stgw.T_NODE, const1map, flow); max_flow_test.augmentOnShortestPath(); + max_flow_test.augmentOnShortestPath(); + + std::cout << max_flow_test.flowValue() << std::endl; return 0; } diff -r b8d635e1672d -r 4535f78639e2 src/work/marci/graph_wrapper.h --- a/src/work/marci/graph_wrapper.h Sat Apr 24 14:25:03 2004 +0000 +++ b/src/work/marci/graph_wrapper.h Sat Apr 24 15:19:17 2004 +0000 @@ -918,7 +918,7 @@ typedef IterableBoolMap< typename Graph::template NodeMap > SFalseTTrueMap; SFalseTTrueMap* s_false_t_true_map; - + public: static const bool S_CLASS=false; static const bool T_CLASS=true; @@ -930,7 +930,15 @@ //using GraphWrapper::NodeIt; typedef typename GraphWrapper::Edge Edge; //using GraphWrapper::EdgeIt; + class ClassNodeIt; + friend class ClassNodeIt; + class OutEdgeIt; + friend class OutEdgeIt; + class InEdgeIt; + friend class InEdgeIt; class ClassNodeIt { + friend class BipartiteGraphWrapper; + protected: Node n; public: ClassNodeIt() { } @@ -963,8 +971,8 @@ // operator Node() const { return n; } // }; class OutEdgeIt { - public: - + friend class BipartiteGraphWrapper; + protected: typename Graph::OutEdgeIt e; public: OutEdgeIt() { } @@ -978,7 +986,8 @@ operator Edge() const { return Edge(typename Graph::Edge(e)); } }; class InEdgeIt { - public: + friend class BipartiteGraphWrapper; + protected: typename Graph::InEdgeIt e; public: InEdgeIt() { } @@ -994,7 +1003,7 @@ using GraphWrapper::first; ClassNodeIt& first(ClassNodeIt& n, bool _class) const { - n=SNodeIt(*this, _class) ; return n; } + n=ClassNodeIt(*this, _class) ; return n; } // SNodeIt& first(SNodeIt& n) const { n=SNodeIt(*this); return n; } // TNodeIt& first(TNodeIt& n) const { n=TNodeIt(*this); return n; } OutEdgeIt& first(OutEdgeIt& i, const Node& p) const { @@ -1006,7 +1015,7 @@ using GraphWrapper::next; ClassNodeIt& next(ClassNodeIt& n) const { - this->s_false_t_true_map->next(n); return n; + this->s_false_t_true_map->next(n.n); return n; } // SNodeIt& next(SNodeIt& n) const { // this->s_false_t_true_map->next(n); return n; @@ -1319,9 +1328,10 @@ return i; } OutEdgeIt& next(OutEdgeIt& i) const { + typename Graph::Node v; switch (i.spec) { case 0: //normal edge - typename Graph::Node v=this->graph->aNode(i.e); + this->graph->aNode(i.e); this->graph->next(i.e); if (!this->graph->valid(i.e)) { //Az igazi elek vegere ertunk if (this->graph->inSClass(v)) { //S, nincs kiel @@ -1345,9 +1355,10 @@ return i; } InEdgeIt& next(InEdgeIt& i) const { + typename Graph::Node v; switch (i.spec) { case 0: //normal edge - typename Graph::Node v=this->graph->aNode(i.e); + v=this->graph->aNode(i.e); this->graph->next(i.e); if (!this->graph->valid(i.e)) { //Az igazi elek vegere ertunk if (this->graph->inTClass(v)) { //S, nincs beel @@ -1403,28 +1414,30 @@ Node tail(const Edge& e) const { switch (e.spec) { - case 0: - return Node(this->graph->tail(e)); - break; - case 1: - return S_NODE; - break; - case 2: - return Node(e.n); - break; + case 0: + return Node(this->graph->tail(e)); + break; + case 1: + return S_NODE; + break; + case 2: + default: + return Node(e.n); + break; } } Node head(const Edge& e) const { switch (e.spec) { - case 0: - return Node(this->graph->head(e)); - break; - case 1: - return Node(e.n); - break; - case 2: - return T_NODE; - break; + case 0: + return Node(this->graph->head(e)); + break; + case 1: + return Node(e.n); + break; + case 2: + default: + return T_NODE; + break; } } @@ -1458,64 +1471,68 @@ t_value(a) { } T operator[](const Node& n) const { switch (n.spec) { - case 0: - return (*this)[n]; - break; - case 1: - return s_value; - break; - case 2: - return t_value; - break; + case 0: + return Parent::operator[](n); + break; + case 1: + return s_value; + break; + case 2: + default: + return t_value; + break; } } void set(const Node& n, T t) { switch (n.spec) { - case 0: - GraphWrapper::template NodeMap::set(n, t); - break; - case 1: - s_value=t; - break; - case 2: - t_value=t; - break; + case 0: + GraphWrapper::template NodeMap::set(n, t); + break; + case 1: + s_value=t; + break; + case 2: + default: + t_value=t; + break; } } }; template class EdgeMap : public GraphWrapper::template EdgeMap { - typedef typename Graph::template NodeMap Parent; + typedef typename GraphWrapper::template EdgeMap Parent; typename GraphWrapper::template NodeMap node_value; public: - EdgeMap(const stGraphWrapper& _G) : Parent(_G), - node_value(_G) { } + EdgeMap(const stGraphWrapper& _G) : Parent(_G), + node_value(_G) { } EdgeMap(const stGraphWrapper& _G, T a) : Parent(_G, a), node_value(_G, a) { } T operator[](const Edge& e) const { switch (e.spec) { - case 0: - return (*this)[e]; - break; - case 1: - return node_value[e.n]; - break; - case 2: - return node_value[e.n]; - break; + case 0: + return Parent::operator[](e); + break; + case 1: + return node_value[e.n]; + break; + case 2: + default: + return node_value[e.n]; + break; } } void set(const Edge& e, T t) { switch (e.spec) { - case 0: - GraphWrapper::set(e, t); - break; - case 1: - node_value.set(e, t); - break; - case 2: - node_value.set(e, t); - break; + case 0: + GraphWrapper::template EdgeMap::set(e, t); + break; + case 1: + node_value.set(e.n, t); + break; + case 2: + default: + node_value.set(e.n, t); + break; } } };