src/work/marci/bipartite_graph_wrapper_test.cc
author marci
Thu, 22 Apr 2004 16:07:17 +0000
changeset 376 5c12f3515452
child 379 a5bff2813c4d
permissions -rw-r--r--
preflow mods
     1 // -*- c++ -*-
     2 #include <iostream>
     3 #include <fstream>
     4 #include <vector>
     5 
     6 #include <list_graph.h>
     7 #include <smart_graph.h>
     8 //#include <dimacs.h>
     9 #include <time_measure.h>
    10 #include <for_each_macros.h>
    11 #include <bfs_iterator.h>
    12 #include <graph_wrapper.h>
    13 
    14 using namespace hugo;
    15 
    16 int main() {
    17   typedef UndirListGraph Graph; 
    18   typedef Graph::Node Node;
    19   typedef Graph::NodeIt NodeIt;
    20   typedef Graph::Edge Edge;
    21   typedef Graph::EdgeIt EdgeIt;
    22   typedef Graph::OutEdgeIt OutEdgeIt;
    23 
    24   Graph g;
    25   //Node s, t;
    26   //Graph::EdgeMap<int> cap(g);
    27   //readDimacsMaxFlow(std::cin, g, s, t, cap);
    28   std::vector<Graph::Node> s_nodes;
    29   std::vector<Graph::Node> t_nodes;
    30   for (int i=0; i<3; ++i) s_nodes.push_back(g.addNode());
    31   for (int i=0; i<3; ++i) t_nodes.push_back(g.addNode());
    32   g.addEdge(s_nodes[0], t_nodes[2]);
    33   g.addEdge(t_nodes[1], s_nodes[2]);
    34   
    35   Graph::NodeMap<int> ref_map(g, -1);
    36   IterableBoolMap< Graph::NodeMap<int> > bipartite_map(ref_map);
    37   for (int i=0; i<3; ++i) bipartite_map.insert(s_nodes[i], false);
    38   for (int i=0; i<3; ++i) bipartite_map.insert(t_nodes[i], true);
    39   typedef BipartiteGraphWrapper<Graph> BGW;
    40   BGW bgw(g, bipartite_map);
    41   FOR_EACH_LOC(BGW::EdgeIt, e, bgw) {
    42     std::cout << bgw.tail(e) << "->" << bgw.head(e) << std::endl;
    43   }
    44 //   Graph::NodeMap<OutEdgeIt> pred(G);
    45 //   Timer ts;
    46 //   {
    47 //     ts.reset();
    48 //     Graph::NodeMap<bool> reached(G);
    49 //     reached.set(s, true);
    50 //     pred.set(s, INVALID);
    51 //     std::queue<Node> bfs_queue;
    52 //     bfs_queue.push(t);
    53 //     while (!bfs_queue.empty()) {
    54 //       Node v=bfs_queue.front();	
    55 //       bfs_queue.pop();
    56 //       OutEdgeIt e;
    57 //       for(G.first(e,v); G.valid(e); G.next(e)) {
    58 // 	Node w=G.head(e);
    59 // 	if (!reached[w]) {
    60 // 	  bfs_queue.push(w);
    61 // 	  reached.set(w, true);
    62 // 	  pred.set(w, e);
    63 // 	}
    64 //       }
    65 //     }
    66 
    67 //     std::cout << ts << std::endl;
    68 //   }
    69 
    70 //   {
    71 //     ts.reset();      
    72 //     BfsIterator< Graph, Graph::NodeMap<bool> > bfs(G);
    73 //     bfs.pushAndSetReached(s);
    74 //     pred.set(s, INVALID);
    75 //     while (!bfs.finished()) { 
    76 //       ++bfs; 
    77 //       if (G.valid(bfs) && bfs.isBNodeNewlyReached()) 
    78 // 	pred.set(bfs.bNode(), bfs);
    79 //     }
    80 //     std::cout << ts << std::endl;
    81 //   }
    82 
    83   return 0;
    84 }