Changeset 8:cd54905012bc in lemon-0.x
- Timestamp:
- 12/16/03 19:17:51 (21 years ago)
- Branch:
- default
- Phase:
- public
- Convert:
- svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@21
- Location:
- src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
src/include/bfs.h
r6 r8 46 46 47 47 struct do_nothing_map { 48 template <typename V,typename T> 49 static void Put(V v,T t) {}48 template <typename V,typename T> static void Put(V v,T t) {} 49 template <typename G> void SetG(G &g) {} 50 50 }; 51 51 … … 283 283 Graph *G; 284 284 285 //Bfs(int i): visited_map(G), tree_map(G), dist_map(G), priority_map(G) {} 286 Bfs() {} 287 285 288 void SetG(Graph &Gr) 286 289 { 287 290 G=&Gr; 291 visited_map.SetG(Gr); 292 tree_map.SetG(Gr); 293 dist_map.SetG(Gr); 294 priority_map.SetG(Gr); 288 295 } 289 296 -
src/include/graph.h
r6 r8 76 76 bool operator!=(const NodeIterator &i) const {return n!=i.n;} 77 77 78 int Index() { return n; } //If the nodes are indexable78 int Index() const { return n; } //If the nodes are indexable 79 79 friend class Graph; 80 80 friend class EdgeIterator; … … 120 120 bool operator!=(const EdgeIterator &i) const {return e!=i.e;} 121 121 122 int Index() { return e.index.block*EDGE_BLOCK_SIZE+e.index.index; }122 int Index() const { return e.index.block*EDGE_BLOCK_SIZE+e.index.index; } 123 123 //If the edges are indexable 124 124 … … 402 402 public: 403 403 typedef T value_type; 404 void Set(NodeIterator i, const T &t) {map[i.Index()]=t;}405 T &Get(NodeIterator i){return map[i.Index()];}406 T &operator[](NodeIterator i) {return map[i.Index()];}407 408 void update() { map.resize(G-> OldGraph<N,E>::NodeMax());}409 410 NodeMap( Graph<N,E> &Gr) : map(Gr.OldGraph<N,E>::NodeMax()) { G=&Gr ;}411 404 void Put(const NodeIterator i, const T &t) {map[i.Index()]=t;} 405 T Get(const NodeIterator i) const {return map[i.Index()];} 406 T operator[](NodeIterator i) {return map[i.Index()];} 407 408 void update() { map.resize(G->MaxNode());} 409 410 NodeMap() {} 411 void SetG(Graph<N,E> &Gr) { G=&Gr; update();} 412 412 }; 413 413 … … 419 419 public: 420 420 typedef T value_type; 421 void Set(NodeIterator i, const T &t) {map[i.Index()]=t;}422 T &Get( NodeIterator i) {return map[i.Index()];}421 void Put(const NodeIterator i, const T &t) {map[i.Index()]=t;} 422 T &Get(const NodeIterator i) {return map[i.Index()];} 423 423 T &operator[](NodeIterator i) {return map[i.Index()];} 424 424 425 425 void update() 426 { map.resize(Gr.OldGraph<N,E>::edge_block_num*EDGE_BLOCK_SIZE);} 427 428 EdgeMap(Graph<N,E> &Gr) 429 :map(Gr.OldGraph<N,E>::edge_block_num*EDGE_BLOCK_SIZE) 430 { G=&Gr ;} 431 432 }; 426 { map.resize(G->MaxEdge());} 427 428 EdgeMap() {} 429 void SetG(Graph<N,E> &Gr) 430 { G=&Gr ;update();} 431 432 }; 433 434 435 int MaxNode() { return OldGraph<N,E>::MaxNode();} 436 int MaxEdge() { return ::edge_block_num*EDGE_BLOCK_SIZE;} 433 437 434 438 }; -
src/work/bfsdemo.cc
r6 r8 68 68 void Put(const IGraph::NodeIterator &n,const value_type &t) { n->isVis=t; } 69 69 value_type Get(const IGraph::NodeIterator &n) const { return n->isVis; } 70 void SetG(IGraph &G) {} 70 71 } visited; 71 72 struct _tree_map_t { … … 73 74 void Put(const IGraph::NodeIterator &n,const value_type &t) 74 75 { cout << t.From().Index() << "->" << t.To().Index() << '\n'; } 76 void SetG(IGraph &G) {} 75 77 } tree; 76 78 do_nothing_map dist; //node->int (W) … … 90 92 void Put(const IGraph::NodeIterator &n,const value_type &t) { n->isVis=t; } 91 93 value_type Get(const IGraph::NodeIterator &n) const { return n->isVis; } 94 void SetG(IGraph &G) {} 92 95 }; 93 96 struct tree_map_t { … … 95 98 void Put(const IGraph::NodeIterator &n,const value_type &t) 96 99 { cout << t.From().Index() << "->" << t.To().Index() << '\n'; } 100 void SetG(IGraph &G) {} 97 101 }; 98 102 typedef do_nothing_map dist_map_t; //node->int (W) -
src/work/bfsdemo2.cc
r6 r8 16 16 TestGraph::NodeIterator tn,n2; 17 17 18 for(int i=1;i<=5000;i++) 18 cout << "Create nodes\n"; 19 20 for(int i=1;i<=500;i++) 19 21 { 20 22 *(tn=G.AddNode())=i; … … 22 24 } 23 25 26 cout << "Create Edges\n"; 27 24 28 for(TestGraph::NodeIterator n(G);n.isValid();++n) 25 for(TestGraph::NodeIterator m(G);m.isValid();++m) 29 for(TestGraph::NodeIterator m(G);m.isValid();++m) if(n!=m) 26 30 if(gcd(*n,*m)>1) G.AddEdge(n,m); 27 31 32 33 cout << "Run BFS\n"; 34 28 35 Bfs<default_bfs_T<TestGraph> > bfs; 29 36 … … 33 40 34 41 for(TestGraph::NodeIterator n(G);n.isValid();++n) 35 cout << Get(bfs.tree_map,n).From() << "->" << Get(bfs.tree_map,n).To()36 42 if((*n)!=2) 43 cout << (Get(bfs.dist_map,n)) << '\n'; 37 44 45 for(TestGraph::NodeIterator n(G);n.isValid();++n) 46 if(Get(bfs.dist_map,n)) 47 cout << *(Get(bfs.tree_map,n).From()) << "->" 48 << *(Get(bfs.tree_map,n).To()) 49 << '\n'; 38 50 }
Note: See TracChangeset
for help on using the changeset viewer.