1.1 --- a/src/work/bfs_iterator.hh Wed Feb 18 14:43:01 2004 +0000
1.2 +++ b/src/work/bfs_iterator.hh Wed Feb 18 15:58:28 2004 +0000
1.3 @@ -283,7 +283,7 @@
1.4 bool finished() { return bfs_queue.empty(); }
1.5 operator OutEdgeIt () { return actual_edge; }
1.6 bool bNodeIsNewlyReached() { return b_node_newly_reached; }
1.7 - bool aNodeIsLeaved() { return !(actual_edge.valid()); }
1.8 + bool aNodeIsExamined() { return !(actual_edge.valid()); }
1.9 };
1.10
1.11 template <typename Graph, typename OutEdgeIt, typename ReachedMap>
1.12 @@ -614,6 +614,72 @@
1.13 };
1.14
1.15
1.16 + template <typename Graph, typename OutEdgeIt, typename ReachedMap>
1.17 + struct DfsIterator4 {
1.18 + typedef typename Graph::NodeIt NodeIt;
1.19 + const Graph& G;
1.20 + std::stack<OutEdgeIt> dfs_stack;
1.21 + //ReachedMap& reached;
1.22 + bool b_node_newly_reached;
1.23 + OutEdgeIt actual_edge;
1.24 + NodeIt actual_node;
1.25 + ReachedMap reached;
1.26 + DfsIterator4(const Graph& _G
1.27 + /*, std::stack<OutEdgeIt>& _bfs_queue,
1.28 + ReachedMap& _reached*/) :
1.29 + G(_G), reached(G, false) /*, bfs_queue(_bfs_queue), reached(_reached)*/ {
1.30 + //actual_edge=bfs_queue.top();
1.31 + //if (actual_edge.valid()) {
1.32 + // NodeIt w=G.bNode(actual_edge);
1.33 + //if (!reached.get(w)) {
1.34 + // bfs_queue.push(OutEdgeIt(G, w));
1.35 + // reached.set(w, true);
1.36 + // b_node_newly_reached=true;
1.37 + //} else {
1.38 + // ++(bfs_queue.top());
1.39 + // b_node_newly_reached=false;
1.40 + //}
1.41 + //} else {
1.42 + // bfs_queue.pop();
1.43 + //}
1.44 + }
1.45 + void pushAndSetReached(NodeIt s) {
1.46 + reached.set(s, true);
1.47 + dfs_stack.push(G.template first<OutEdgeIt>(s));
1.48 + }
1.49 + DfsIterator4<Graph, OutEdgeIt, ReachedMap>&
1.50 + operator++() {
1.51 + actual_edge=dfs_stack.top();
1.52 + //actual_node=G.aNode(actual_edge);
1.53 + if (actual_edge.valid()) {
1.54 + NodeIt w=G.bNode(actual_edge);
1.55 + actual_node=w;
1.56 + if (!reached.get(w)) {
1.57 + dfs_stack.push(G.template first<OutEdgeIt>(w));
1.58 + reached.set(w, true);
1.59 + b_node_newly_reached=true;
1.60 + } else {
1.61 + ++(dfs_stack.top());
1.62 + b_node_newly_reached=false;
1.63 + }
1.64 + } else {
1.65 + //actual_node=G.aNode(dfs_stack.top());
1.66 + dfs_stack.pop();
1.67 + }
1.68 + return *this;
1.69 + }
1.70 + bool finished() const { return dfs_stack.empty(); }
1.71 + operator OutEdgeIt () const { return actual_edge; }
1.72 + bool isBNodeNewlyReached() const { return b_node_newly_reached; }
1.73 + bool isANodeExamined() const { return !(actual_edge.valid()); }
1.74 + NodeIt aNode() const { return actual_node; }
1.75 + NodeIt bNode() const { return G.bNode(actual_edge); }
1.76 + const ReachedMap& getReachedMap() const { return reached; }
1.77 + const std::stack<OutEdgeIt>& getDfsStack() const { return dfs_stack; }
1.78 + };
1.79 +
1.80 +
1.81 +
1.82 template <typename GraphWrapper, typename ReachedMap>
1.83 class BfsIterator5 {
1.84 typedef typename GraphWrapper::NodeIt NodeIt;