Problem in returning value from DFS vistor class.
Bonjour,Dear all I am facing general programming related logical error. I want to access bolean variable of the class by using get method. but it is not giving the right result. When i read the counter and boolean variable by getcount() and isPathExist() methods. Each time it returns "0" for counter and false for boolean. My code is below #include "AlgoPC.h"#include <boost/graph/depth_first_search.hpp> //=============================Depth First Search===========================class DFSVisitor: public default_dfs_visitor {protected: slBayesianNetwork *pBN; int nodeA, nodeC; bool exist; int counter; public: DFSVisitor(slBayesianNetwork *pBN, int nodeA, int nodeC); ~DFSVisitor(); void discover_vertex(slNode u, const slGraph &g); void resetCounter(); bool isPathExist(); int getCounter(); };//-------------------------------------------------------------------------- DFSVisitor::DFSVisitor(slBayesianNetwork *pBN, int nodeA, int nodeC) { this->pBN = pBN; this->nodeA = nodeA; this->nodeC = nodeC; this->exist = false; this->resetCounter(); }//-------------------------------------------------------------------------- DFSVisitor::~DFSVisitor() { }//--------------------------------------------------------------------------void DFSVisitor::resetCounter() { this->counter = 0; }//-------------------------------------------------------------------------- //--------------------------------------------------------------------------void DFSVisitor::discover_vertex(slNode u, const slGraph &g) { this->counter++; unsigned int varIdx = this->pBN->getVariableIndex(u); if ((varIdx == this->nodeC ) && ((this->counter) > 2)) { this->exist = true; cout<<"\n "<<counter<<" node = "<< varIdx+1; } }//--------------------------------------------------------------------------int DFSVisitor::getCounter() { return this->counter; }//--------------------------------------------------------------------------bool DFSVisitor::isPathExist() { return this->exist; } ====================== main program ======================= cout<< "\n a = "<<a<<" c = "<<c; DFSVisitor vis(this->pBN, a , c); depth_first_search((slGraph&)this->pBN->get_graph(),visitor(vis).root_vertex(vertex(a, this->pBN->get_graph()))); cout<<"\n counter is = "<<vis.getCounter()<<" Path exist = "<< vis.isPathExist(); ======================== out put ========================= counter is = 0 path exist = 0 (false) ------------------------------------------------------- I will be thankful to you for guiding me. Best Regards Amanullah YASIN Master2 (ECD) Ecole Polytechnique Université de Nantes, France. Mob# 06 47 62 89 96 Fix # 02 72 00 26 45 amanyasin@gmail.com
I am facing general programming related logical error. I want to access bolean variable of the class by using get method. but it is not giving the right result. When i read the counter and boolean variable by getcount() and isPathExist() methods. Each time it returns "0" for counter and false for boolean.
class DFSVisitor: public default_dfs_visitor
{protected: slBayesianNetwork *pBN; int nodeA, nodeC; bool exist; int counter;
In the BGL, visitors are passed by value into and between internal function calls so you can't expect counter (for example) to refer to the same integer object before, during and after an algorithm. Instead, redefine your visitor to contain references or pointers to objects where you call the algorithm. For example: struct my_visitor : default_dfs_visitor { int& counter; visitor(int& x) : counter(x) { } } // When I call dfs int count = 0; depth_first_search(g, visitor(my_visitor(count))); cout << count << "\n"; // prints some number > 0 Andrew Sutton andrew.n.sutton@gmail.com
participants (2)
-
Amanullah Yasin
-
Andrew Sutton