diff -r ee5959aa4410 -r c280de819a73 src/work/bfsdemo.cc --- a/src/work/bfsdemo.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,128 +0,0 @@ -#include -#include -#include - -using namespace NEGRO; -using namespace std; - -class IGraph -{ -public: - - // struct NodeType {bfs_node_data bfs;}; - struct NodeType {bool isVis;}; - - vector nodes; - - class NodeIterator - { - public: - IGraph *G; - int n; - NodeIterator &operator ++() { n++; return *this;} - NodeType &operator *() const { return G->nodes[n];} - NodeType *operator ->() const { return &(G->nodes[n]);} - bool isValid() const {return n<=5000;} - int Index() {return n;} //csak a kiirashoz kell - - NodeIterator() {} - NodeIterator(IGraph &Gr) {G=&Gr;n=1;} //Bfs class prefer this. - }; - - void GetFirst(NodeIterator &i) {i.G=this;i.n=1;} - - class OutEdgeIterator - { - public: - IGraph *G; - int f,t; - int gcd() { int a=f;int b=t;int c;while((c=a%b)) {a=b;b=c;} ; return b;} - OutEdgeIterator &operator ++() {while(++t<=5000&&gcd()==1);return *this;} - bool isValid() const {return t<=5000;} - NodeIterator From() const {NodeIterator i; i.G=G;i.n=f;return i;} - NodeIterator To() const {NodeIterator i; i.G=G;i.n=t;return i;} - NodeIterator Anode() const {return From();} - NodeIterator Bnode() const {return To();} - - OutEdgeIterator() {} - OutEdgeIterator(IGraph &Gr,NodeIterator &n) //Bfs class prefer this. - {G=&Gr;f=n.n;t=0;operator++();} - }; - - typedef OutEdgeIterator EdgeIterator; - void GetFirst(OutEdgeIterator &i,const NodeIterator &n) - {i.G=this;i.f=n.n;i.t=0;++i;} - - IGraph() : nodes(5001) {} -}; - -class IMaps_t -{ -public: -// class_element_map visited; - struct _visited_map_t { - typedef bool value_type; - void Put(const IGraph::NodeIterator &n,const value_type &t) { n->isVis=t; } - value_type Get(const IGraph::NodeIterator &n) const { return n->isVis; } - void SetG(IGraph &G) {} - } visited; - struct _tree_map_t { - typedef IGraph::EdgeIterator value_type; - void Put(const IGraph::NodeIterator &n,const value_type &t) - { cout << t.From().Index() << "->" << t.To().Index() << '\n'; } - void SetG(IGraph &G) {} - } tree; - do_nothing_map dist; //node->int (W) - do_nothing_map priority; //node->int (W) -}; - -// New style bfs traits -class BFS_T -{ -public: - - typedef IGraph Graph; - typedef IGraph::OutEdgeIterator SearchEdgeIterator; - - struct visited_map_t { - typedef bool value_type; - void Put(const IGraph::NodeIterator &n,const value_type &t) { n->isVis=t; } - value_type Get(const IGraph::NodeIterator &n) const { return n->isVis; } - void SetG(IGraph &G) {} - }; - struct tree_map_t { - typedef IGraph::EdgeIterator value_type; - void Put(const IGraph::NodeIterator &n,const value_type &t) - { cout << t.From().Index() << "->" << t.To().Index() << '\n'; } - void SetG(IGraph &G) {} - }; - typedef do_nothing_map dist_map_t; //node->int (W) - typedef do_nothing_map priority_map_t; //node->int (W) -}; - - -int main() -{ - IGraph IG; - -// //Function-syte calling -// IMaps_t IMaps; - -// IGraph::NodeIterator in; -// IG.GetFirst(in); -// ++in; -// bfs_fn(IG,in,IMaps); - - //Class-style calling: - - IGraph::NodeIterator in; - IG.GetFirst(in); - ++in; - Bfs bfs; - bfs.SetG(IG); - bfs.Init(in); - bfs.Run(); -}