src/work/athos/bfs_test.cc
changeset 778 08a1d1e3070d
child 921 818510fa3d99
equal deleted inserted replaced
-1:000000000000 0:7345e77983d5
       
     1 // -*- c++ -*-
       
     2 #include <iostream>
       
     3 #include <fstream>
       
     4 
       
     5 #include <sage_graph.h>
       
     6 //#include <smart_graph.h>
       
     7 #include <hugo/dimacs.h>
       
     8 #include <hugo/time_measure.h>
       
     9 #include <hugo/for_each_macros.h>
       
    10 #include <bfs_dfs.h>
       
    11 
       
    12 using namespace hugo;
       
    13 
       
    14 int main() {
       
    15   typedef SageGraph Graph; 
       
    16   typedef Graph::Node Node;
       
    17   typedef Graph::NodeIt NodeIt;
       
    18   typedef Graph::Edge Edge;
       
    19   typedef Graph::EdgeIt EdgeIt;
       
    20   typedef Graph::OutEdgeIt OutEdgeIt;
       
    21 
       
    22   Graph g;
       
    23   Node s, t;
       
    24   Graph::EdgeMap<int> cap(g);
       
    25   //readDimacsMaxFlow(std::cin, g, s, t, cap);
       
    26   readDimacs(std::cin, g);
       
    27 
       
    28   Graph::NodeMap<OutEdgeIt> pred(g);
       
    29 
       
    30   Timer ts;
       
    31   /*
       
    32   {
       
    33     ts.reset();
       
    34     Graph::NodeMap<bool> reached(g);
       
    35     reached.set(s, true);
       
    36     pred.set(s, INVALID);
       
    37     std::queue<Node> bfs_queue;
       
    38     bfs_queue.push(t);
       
    39     while (!bfs_queue.empty()) {
       
    40       Node v=bfs_queue.front();	
       
    41       bfs_queue.pop();
       
    42       OutEdgeIt e;
       
    43       for(g.first(e,v); g.valid(e); g.next(e)) {
       
    44 	Node w=g.head(e);
       
    45 	if (!reached[w]) {
       
    46 	  bfs_queue.push(w);
       
    47 	  reached.set(w, true);
       
    48 	  pred.set(w, e);
       
    49 	}
       
    50       }
       
    51     }
       
    52 
       
    53     std::cout << ts << std::endl;
       
    54   }
       
    55   */
       
    56 
       
    57   {
       
    58     ts.reset();
       
    59     Graph::NodeMap<bool> bfs_reached(g);
       
    60     Graph::NodeMap<Edge> bfs_pred(g); 
       
    61     Graph::NodeMap<int> bfs_dist(g);
       
    62       
       
    63     Bfs< Graph, Graph::NodeMap<bool>, 
       
    64       Graph::NodeMap<Edge>, Graph::NodeMap<int> > 
       
    65       bfs(g,bfs_reached, bfs_pred, bfs_dist );
       
    66     bfs.run(s);
       
    67     /*
       
    68     pred.set(s, INVALID);
       
    69     while (!bfs.finished()) { 
       
    70       ++bfs; 
       
    71       if (g.valid(bfs) && bfs.isBNodeNewlyReached()) 
       
    72 	pred.set(bfs.bNode(), bfs);
       
    73     }
       
    74     */
       
    75     std::cout << ts << std::endl;
       
    76   }
       
    77 
       
    78   return 0;
       
    79 }