[Lemon-commits] [lemon_svn] marci: r430 - hugo/trunk/src/work/marci
Lemon SVN
svn at lemon.cs.elte.hu
Mon Nov 6 20:39:24 CET 2006
Author: marci
Date: Wed Apr 7 12:57:58 2004
New Revision: 430
Modified:
hugo/trunk/src/work/marci/edmonds_karp.h
hugo/trunk/src/work/marci/graph_wrapper.h
hugo/trunk/src/work/marci/iterator_bfs_demo.cc
Log:
gw
Modified: hugo/trunk/src/work/marci/edmonds_karp.h
==============================================================================
--- hugo/trunk/src/work/marci/edmonds_karp.h (original)
+++ hugo/trunk/src/work/marci/edmonds_karp.h Wed Apr 7 12:57:58 2004
@@ -274,8 +274,7 @@
ResGW res_graph(*g, *flow, *capacity);
bool _augment=false;
- typedef typename ResGW::NodeMap<bool> ReachedMap;
- BfsIterator5< ResGW, ReachedMap > bfs(res_graph);
+ BfsIterator5< ResGW, typename ResGW::NodeMap<bool> > bfs(res_graph);
bfs.pushAndSetReached(s);
typename ResGW::NodeMap<ResGWEdge> pred(res_graph);
@@ -339,8 +338,7 @@
ResGW res_graph(*g, *flow, *capacity);
- typedef typename ResGW::NodeMap<bool> ReachedMap;
- BfsIterator5< ResGW, ReachedMap > bfs(res_graph);
+ BfsIterator5< ResGW, typename ResGW::NodeMap<bool> > bfs(res_graph);
bfs.pushAndSetReached(s);
//typename ResGW::NodeMap<int> dist(res_graph); //filled up with 0's
@@ -391,8 +389,8 @@
while (__augment) {
__augment=false;
//computing blocking flow with dfs
- typedef typename TrivGraphWrapper<MG>::NodeMap<bool> BlockingReachedMap;
- DfsIterator5< TrivGraphWrapper<MG>, BlockingReachedMap > dfs(F);
+
+ DfsIterator5< MG, typename MG::NodeMap<bool> > dfs(F);
typename MG::NodeMap<typename MG::Edge> pred(F);
pred.set(sF, INVALID);
//invalid iterators for sources
@@ -450,8 +448,7 @@
ResGW res_graph(*g, *flow, *capacity);
//bfs for distances on the residual graph
- typedef typename ResGW::NodeMap<bool> ReachedMap;
- BfsIterator5< ResGW, ReachedMap > bfs(res_graph);
+ BfsIterator5< ResGW, typename ResGW::NodeMap<bool> > bfs(res_graph);
bfs.pushAndSetReached(s);
typename ResGW::NodeMap<int> dist(res_graph); //filled up with 0's
@@ -499,8 +496,7 @@
while (__augment) {
__augment=false;
//computing blocking flow with dfs
- typedef typename TrivGraphWrapper<MG>::NodeMap<bool> BlockingReachedMap;
- DfsIterator5< TrivGraphWrapper<MG>, BlockingReachedMap > dfs(F);
+ DfsIterator5< MG, typename MG::NodeMap<bool> > dfs(F);
typename MG::NodeMap<typename MG::Edge> pred(F);
pred.set(sF, INVALID);
//invalid iterators for sources
@@ -556,8 +552,7 @@
ResGW res_graph(*g, *flow, *capacity);
- typedef typename ResGW::NodeMap<bool> ReachedMap;
- BfsIterator5< ResGW, ReachedMap > bfs(res_graph);
+ BfsIterator5< ResGW, typename ResGW::NodeMap<bool> > bfs(res_graph);
bfs.pushAndSetReached(s);
DistanceMap<ResGW> dist(res_graph);
@@ -597,8 +592,7 @@
__augment=false;
//computing blocking flow with dfs
- typedef typename ErasingResGW::NodeMap<bool> BlockingReachedMap;
- DfsIterator5< ErasingResGW, BlockingReachedMap >
+ DfsIterator5< ErasingResGW, typename ErasingResGW::NodeMap<bool> >
dfs(erasing_res_graph);
typename ErasingResGW::NodeMap<typename ErasingResGW::OutEdgeIt>
pred(erasing_res_graph);
Modified: hugo/trunk/src/work/marci/graph_wrapper.h
==============================================================================
--- hugo/trunk/src/work/marci/graph_wrapper.h (original)
+++ hugo/trunk/src/work/marci/graph_wrapper.h Wed Apr 7 12:57:58 2004
@@ -6,158 +6,154 @@
namespace hugo {
- template<typename Graph>
- class TrivGraphWrapper {
- protected:
- Graph* graph;
+// template<typename Graph>
+// class TrivGraphWrapper {
+// protected:
+// Graph* graph;
- public:
-// typedef Graph BaseGraph;
- typedef Graph ParentGraph;
+// public:
+// // typedef Graph BaseGraph;
+// typedef Graph ParentGraph;
-// TrivGraphWrapper() : graph(0) { }
- TrivGraphWrapper(Graph& _graph) : graph(&_graph) { }
-// void setGraph(Graph& _graph) { graph = &_graph; }
-// Graph& getGraph() const { return *graph; }
+// // TrivGraphWrapper() : graph(0) { }
+// TrivGraphWrapper(Graph& _graph) : graph(&_graph) { }
+// // void setGraph(Graph& _graph) { graph = &_graph; }
+// // Graph& getGraph() const { return *graph; }
- typedef typename Graph::Node Node;
- class NodeIt : public Graph::NodeIt {
- public:
- NodeIt() { }
- NodeIt(const typename Graph::NodeIt& n) : Graph::NodeIt(n) { }
-// NodeIt(const typename BaseGraph::NodeIt& n) : Graph::NodeIt(n) { }
- NodeIt(const Invalid& i) : Graph::NodeIt(i) { }
- NodeIt(const TrivGraphWrapper<Graph>& _G) :
- Graph::NodeIt(*(_G.graph)) { }
-// operator typename BaseGraph::NodeIt() {
-// return typename BaseGraph::NodeIt(this->Graph::NodeIt);
-// }
- };
- typedef typename Graph::Edge Edge;
- class OutEdgeIt : public Graph::OutEdgeIt {
- public:
- OutEdgeIt() { }
- OutEdgeIt(const typename Graph::OutEdgeIt& e) : Graph::OutEdgeIt(e) { }
- OutEdgeIt(const Invalid& i) : Graph::OutEdgeIt(i) { }
- OutEdgeIt(const TrivGraphWrapper<Graph>& _G, const Node& n) :
- Graph::OutEdgeIt(*(_G.graph), n) { }
- };
- class InEdgeIt : public Graph::InEdgeIt {
- public:
- InEdgeIt() { }
- InEdgeIt(const typename Graph::InEdgeIt& e) : Graph::InEdgeIt(e) { }
- InEdgeIt(const Invalid& i) : Graph::InEdgeIt(i) { }
- InEdgeIt(const TrivGraphWrapper<Graph>& _G, const Node& n) :
- Graph::InEdgeIt(*(_G.graph), n) { }
- };
- //typedef typename Graph::SymEdgeIt SymEdgeIt;
- class EdgeIt : public Graph::EdgeIt {
- public:
- EdgeIt() { }
- EdgeIt(const typename Graph::EdgeIt& e) : Graph::EdgeIt(e) { }
- EdgeIt(const Invalid& i) : Graph::EdgeIt(i) { }
- EdgeIt(const TrivGraphWrapper<Graph>& _G) :
- Graph::EdgeIt(*(_G.graph)) { }
- };
+// typedef typename Graph::Node Node;
+// class NodeIt : public Graph::NodeIt {
+// public:
+// NodeIt() { }
+// NodeIt(const typename Graph::NodeIt& n) : Graph::NodeIt(n) { }
+// NodeIt(const Invalid& i) : Graph::NodeIt(i) { }
+// NodeIt(const TrivGraphWrapper<Graph>& _G) :
+// Graph::NodeIt(*(_G.graph)) { }
+// };
+// typedef typename Graph::Edge Edge;
+// class OutEdgeIt : public Graph::OutEdgeIt {
+// public:
+// OutEdgeIt() { }
+// OutEdgeIt(const typename Graph::OutEdgeIt& e) : Graph::OutEdgeIt(e) { }
+// OutEdgeIt(const Invalid& i) : Graph::OutEdgeIt(i) { }
+// OutEdgeIt(const TrivGraphWrapper<Graph>& _G, const Node& n) :
+// Graph::OutEdgeIt(*(_G.graph), n) { }
+// };
+// class InEdgeIt : public Graph::InEdgeIt {
+// public:
+// InEdgeIt() { }
+// InEdgeIt(const typename Graph::InEdgeIt& e) : Graph::InEdgeIt(e) { }
+// InEdgeIt(const Invalid& i) : Graph::InEdgeIt(i) { }
+// InEdgeIt(const TrivGraphWrapper<Graph>& _G, const Node& n) :
+// Graph::InEdgeIt(*(_G.graph), n) { }
+// };
+// //typedef typename Graph::SymEdgeIt SymEdgeIt;
+// class EdgeIt : public Graph::EdgeIt {
+// public:
+// EdgeIt() { }
+// EdgeIt(const typename Graph::EdgeIt& e) : Graph::EdgeIt(e) { }
+// EdgeIt(const Invalid& i) : Graph::EdgeIt(i) { }
+// EdgeIt(const TrivGraphWrapper<Graph>& _G) :
+// Graph::EdgeIt(*(_G.graph)) { }
+// };
- NodeIt& first(NodeIt& i) const {
- i=NodeIt(*this);
- return i;
- }
-// template<typename I> I& first(I& i) const {
-// i=I(*this);
+// NodeIt& first(NodeIt& i) const {
+// i=NodeIt(*this);
// return i;
// }
- OutEdgeIt& first(OutEdgeIt& i, const Node& p) const {
- i=OutEdgeIt(*this, p);
- return i;
- }
- InEdgeIt& first(InEdgeIt& i, const Node& p) const {
- i=InEdgeIt(*this, p);
- return i;
- }
- EdgeIt& first(EdgeIt& i) const {
- i=EdgeIt(*this);
- return i;
- }
-// template<typename I, typename P> I& first(I& i, const P& p) const {
-// i=I(*this, p);
+// OutEdgeIt& first(OutEdgeIt& i, const Node& p) const {
+// i=OutEdgeIt(*this, p);
+// return i;
+// }
+// InEdgeIt& first(InEdgeIt& i, const Node& p) const {
+// i=InEdgeIt(*this, p);
+// return i;
+// }
+// EdgeIt& first(EdgeIt& i) const {
+// i=EdgeIt(*this);
// return i;
// }
+// // template<typename I> I& first(I& i) const {
+// // i=I(*this);
+// // return i;
+// // }
+// // template<typename I, typename P> I& first(I& i, const P& p) const {
+// // i=I(*this, p);
+// // return i;
+// // }
-// template<typename I> I getNext(const I& i) const {
-// return graph->getNext(i); }
-// template<typename I> I& next(I &i) const { graph->next(i); return i; }
- NodeIt& next(NodeIt& i) const { graph->next(i); return i; }
- OutEdgeIt& next(OutEdgeIt& i) const { graph->next(i); return i; }
- InEdgeIt& next(InEdgeIt& i) const { graph->next(i); return i; }
- EdgeIt& next(EdgeIt& i) const { graph->next(i); return i; }
+// // template<typename I> I getNext(const I& i) const {
+// // return graph->getNext(i); }
- template< typename It > It first() const {
- It e; this->first(e); return e; }
+// NodeIt& next(NodeIt& i) const { graph->next(i); return i; }
+// OutEdgeIt& next(OutEdgeIt& i) const { graph->next(i); return i; }
+// InEdgeIt& next(InEdgeIt& i) const { graph->next(i); return i; }
+// EdgeIt& next(EdgeIt& i) const { graph->next(i); return i; }
+// // template<typename I> I& next(I &i) const { graph->next(i); return i; }
+// template< typename It > It first() const {
+// It e; this->first(e); return e; }
- template< typename It > It first(const Node& v) const {
- It e; this->first(e, v); return e; }
+// template< typename It > It first(const Node& v) const {
+// It e; this->first(e, v); return e; }
- Node head(const Edge& e) const { return graph->head(e); }
- Node tail(const Edge& e) const { return graph->tail(e); }
+// Node head(const Edge& e) const { return graph->head(e); }
+// Node tail(const Edge& e) const { return graph->tail(e); }
- template<typename I> bool valid(const I& i) const {
- return graph->valid(i); }
+// template<typename I> bool valid(const I& i) const {
+// return graph->valid(i); }
- //template<typename I> void setInvalid(const I &i);
- //{ return graph->setInvalid(i); }
+// //template<typename I> void setInvalid(const I &i);
+// //{ return graph->setInvalid(i); }
- int nodeNum() const { return graph->nodeNum(); }
- int edgeNum() const { return graph->edgeNum(); }
+// int nodeNum() const { return graph->nodeNum(); }
+// int edgeNum() const { return graph->edgeNum(); }
- template<typename I> Node aNode(const I& e) const {
- return graph->aNode(e); }
- template<typename I> Node bNode(const I& e) const {
- return graph->bNode(e); }
+// template<typename I> Node aNode(const I& e) const {
+// return graph->aNode(e); }
+// template<typename I> Node bNode(const I& e) const {
+// return graph->bNode(e); }
- Node addNode() const { return graph->addNode(); }
- Edge addEdge(const Node& tail, const Node& head) const {
- return graph->addEdge(tail, head); }
+// Node addNode() const { return graph->addNode(); }
+// Edge addEdge(const Node& tail, const Node& head) const {
+// return graph->addEdge(tail, head); }
- template<typename I> void erase(const I& i) const { graph->erase(i); }
+// template<typename I> void erase(const I& i) const { graph->erase(i); }
- void clear() const { graph->clear(); }
+// void clear() const { graph->clear(); }
- template<typename T> class NodeMap : public Graph::NodeMap<T> {
- public:
- NodeMap(const TrivGraphWrapper<Graph>& _G) :
- Graph::NodeMap<T>(*(_G.graph)) { }
- NodeMap(const TrivGraphWrapper<Graph>& _G, T a) :
- Graph::NodeMap<T>(*(_G.graph), a) { }
- };
-
- template<typename T> class EdgeMap : public Graph::EdgeMap<T> {
- public:
- EdgeMap(const TrivGraphWrapper<Graph>& _G) :
- Graph::EdgeMap<T>(*(_G.graph)) { }
- EdgeMap(const TrivGraphWrapper<Graph>& _G, T a) :
- Graph::EdgeMap<T>(*(_G.graph), a) { }
- };
-
-// template<typename Map, typename T> class NodeMapWrapper {
-// protected:
-// Map* map;
+// template<typename T> class NodeMap : public Graph::NodeMap<T> {
// public:
-// NodeMapWrapper(Map& _map) : map(&_map) { }
-// void set(Node n, T a) { map->set(n, a); }
-// T get(Node n) const { return map->get(n); }
+// NodeMap(const TrivGraphWrapper<Graph>& _G) :
+// Graph::NodeMap<T>(*(_G.graph)) { }
+// NodeMap(const TrivGraphWrapper<Graph>& _G, T a) :
+// Graph::NodeMap<T>(*(_G.graph), a) { }
// };
-// template<typename Map, typename T> class EdgeMapWrapper {
-// protected:
-// Map* map;
+// template<typename T> class EdgeMap : public Graph::EdgeMap<T> {
// public:
-// EdgeMapWrapper(Map& _map) : map(&_map) { }
-// void set(Edge n, T a) { map->set(n, a); }
-// T get(Edge n) const { return map->get(n); }
+// EdgeMap(const TrivGraphWrapper<Graph>& _G) :
+// Graph::EdgeMap<T>(*(_G.graph)) { }
+// EdgeMap(const TrivGraphWrapper<Graph>& _G, T a) :
+// Graph::EdgeMap<T>(*(_G.graph), a) { }
// };
- };
+
+// // template<typename Map, typename T> class NodeMapWrapper {
+// // protected:
+// // Map* map;
+// // public:
+// // NodeMapWrapper(Map& _map) : map(&_map) { }
+// // void set(Node n, T a) { map->set(n, a); }
+// // T get(Node n) const { return map->get(n); }
+// // };
+
+// // template<typename Map, typename T> class EdgeMapWrapper {
+// // protected:
+// // Map* map;
+// // public:
+// // EdgeMapWrapper(Map& _map) : map(&_map) { }
+// // void set(Edge n, T a) { map->set(n, a); }
+// // T get(Edge n) const { return map->get(n); }
+// // };
+// };
template<typename Graph>
@@ -176,48 +172,64 @@
typedef typename Graph::Node Node;
class NodeIt : public Graph::NodeIt {
+ typedef typename Graph::NodeIt GraphNodeIt;
public:
NodeIt() { }
NodeIt(const typename Graph::NodeIt& n) : Graph::NodeIt(n) { }
NodeIt(const Invalid& i) : Graph::NodeIt(i) { }
NodeIt(const GraphWrapper<Graph>& _G) :
Graph::NodeIt(*(_G.graph)) { }
+// operator Node() const {
+// std::cout << "ize" << std::endl;
+// return Node(this->GraphNodeIt);
+// }
};
typedef typename Graph::Edge Edge;
class OutEdgeIt : public Graph::OutEdgeIt {
+ typedef typename Graph::OutEdgeIt GraphOutEdgeIt;
public:
OutEdgeIt() { }
OutEdgeIt(const typename Graph::OutEdgeIt& e) : Graph::OutEdgeIt(e) { }
OutEdgeIt(const Invalid& i) : Graph::OutEdgeIt(i) { }
OutEdgeIt(const GraphWrapper<Graph>& _G, const Node& n) :
Graph::OutEdgeIt(*(_G.graph), n) { }
+// operator Edge() const {
+// std::cout << "ize" << std::endl;
+// return Edge(this->GraphOutEdgeIt);
+// }
};
class InEdgeIt : public Graph::InEdgeIt {
+ typedef typename Graph::InEdgeIt GraphInEdgeIt;
public:
InEdgeIt() { }
InEdgeIt(const typename Graph::InEdgeIt& e) : Graph::InEdgeIt(e) { }
InEdgeIt(const Invalid& i) : Graph::InEdgeIt(i) { }
InEdgeIt(const GraphWrapper<Graph>& _G, const Node& n) :
Graph::InEdgeIt(*(_G.graph), n) { }
+// operator Edge() const {
+// std::cout << "ize" << std::endl;
+// return Edge(this->InOutEdgeIt);
+// }
};
//typedef typename Graph::SymEdgeIt SymEdgeIt;
class EdgeIt : public Graph::EdgeIt {
+ typedef typename Graph::EdgeIt GraphEdgeIt;
public:
EdgeIt() { }
EdgeIt(const typename Graph::EdgeIt& e) : Graph::EdgeIt(e) { }
EdgeIt(const Invalid& i) : Graph::EdgeIt(i) { }
EdgeIt(const GraphWrapper<Graph>& _G) :
Graph::EdgeIt(*(_G.graph)) { }
+// operator Edge() const {
+// std::cout << "ize" << std::endl;
+// return Edge(this->GraphEdgeIt);
+// }
};
NodeIt& first(NodeIt& i) const {
i=NodeIt(*this);
return i;
}
-// template<typename I> I& first(I& i) const {
-// i=I(*this);
-// return i;
-// }
OutEdgeIt& first(OutEdgeIt& i, const Node& p) const {
i=OutEdgeIt(*this, p);
return i;
@@ -230,6 +242,10 @@
i=EdgeIt(*this);
return i;
}
+// template<typename I> I& first(I& i) const {
+// i=I(*this);
+// return i;
+// }
// template<typename I, typename P> I& first(I& i, const P& p) const {
// i=I(*this, p);
// return i;
@@ -237,12 +253,12 @@
// template<typename I> I getNext(const I& i) const {
// return gw.getNext(i); }
-// template<typename I> I& next(I &i) const { graph->next(i); return i; }
+
NodeIt& next(NodeIt& i) const { graph->next(i); return i; }
OutEdgeIt& next(OutEdgeIt& i) const { graph->next(i); return i; }
InEdgeIt& next(InEdgeIt& i) const { graph->next(i); return i; }
EdgeIt& next(EdgeIt& i) const { graph->next(i); return i; }
-
+// template<typename I> I& next(I &i) const { graph->next(i); return i; }
template< typename It > It first() const {
It e; this->first(e); return e; }
@@ -251,6 +267,7 @@
Node head(const Edge& e) const { return graph->head(e); }
Node tail(const Edge& e) const { return graph->tail(e); }
+// Node tail(const OutEdgeIt& e) const { return graph->tail(Edge(e)); }
template<typename I> bool valid(const I& i) const {
return graph->valid(i); }
Modified: hugo/trunk/src/work/marci/iterator_bfs_demo.cc
==============================================================================
--- hugo/trunk/src/work/marci/iterator_bfs_demo.cc (original)
+++ hugo/trunk/src/work/marci/iterator_bfs_demo.cc Wed Apr 7 12:57:58 2004
@@ -88,33 +88,30 @@
// }
{
- typedef TrivGraphWrapper<const Graph> GW;
- GW gw(G);
-
- EdgeNameMap< GW, Graph::NodeMap<string> > edge_name(gw, node_name);
+ EdgeNameMap< Graph, Graph::NodeMap<string> > edge_name(G, node_name);
cout << "bfs and dfs iterator demo on the directed graph" << endl;
- for(GW::NodeIt n(gw); gw.valid(n); gw.next(n)) {
+ for(Graph::NodeIt n(G); G.valid(n); G.next(n)) {
cout << node_name[n] << ": ";
cout << "out edges: ";
- for(GW::OutEdgeIt e(gw, n); gw.valid(e); gw.next(e))
+ for(Graph::OutEdgeIt e(G, n); G.valid(e); G.next(e))
cout << edge_name[e] << " ";
cout << "in edges: ";
- for(GW::InEdgeIt e(gw, n); gw.valid(e); gw.next(e))
+ for(Graph::InEdgeIt e(G, n); G.valid(e); G.next(e))
cout << edge_name[e] << " ";
cout << endl;
}
cout << "bfs from s ..." << endl;
- BfsIterator5< GW, GW::NodeMap<bool> > bfs(gw);
+ BfsIterator5< Graph, Graph::NodeMap<bool> > bfs(G);
bfs.pushAndSetReached(s);
while (!bfs.finished()) {
//cout << "edge: ";
- if (gw.valid(bfs)) {
+ if (G.valid(bfs)) {
cout << edge_name[bfs] << /*endl*/", " <<
- node_name[gw.aNode(bfs)] <<
+ node_name[G.aNode(bfs)] <<
(bfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") <<
- node_name[gw.bNode(bfs)] <<
+ node_name[G.bNode(bfs)] <<
(bfs.isBNodeNewlyReached() ? ": is newly reached." :
": is not newly reached.");
} else {
@@ -139,16 +136,16 @@
cout << " \\--> -------------> "<< endl;
cout << "dfs from s ..." << endl;
- DfsIterator5< GW, GW::NodeMap<bool> > dfs(gw);
+ DfsIterator5< Graph, Graph::NodeMap<bool> > dfs(G);
dfs.pushAndSetReached(s);
while (!dfs.finished()) {
++dfs;
//cout << "edge: ";
- if (gw.valid(dfs)) {
+ if (G.valid(dfs)) {
cout << edge_name[dfs] << /*endl*/", " <<
- node_name[gw.aNode(dfs)] <<
+ node_name[G.aNode(dfs)] <<
(dfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") <<
- node_name[gw.bNode(dfs)] <<
+ node_name[G.bNode(dfs)] <<
(dfs.isBNodeNewlyReached() ? ": is newly reached." :
": is not newly reached.");
} else {
@@ -164,7 +161,7 @@
{
- typedef RevGraphWrapper<const TrivGraphWrapper<const Graph> > GW;
+ typedef RevGraphWrapper<const Graph> GW;
GW gw(G);
EdgeNameMap< GW, Graph::NodeMap<string> > edge_name(gw, node_name);
@@ -240,7 +237,7 @@
{
//typedef UndirGraphWrapper<const Graph> GW;
- typedef UndirGraphWrapper<const TrivGraphWrapper<const Graph> > GW;
+ typedef UndirGraphWrapper<const Graph> GW;
GW gw(G);
EdgeNameMap< GW, Graph::NodeMap<string> > edge_name(gw, node_name);
More information about the Lemon-commits
mailing list