src/work/marci/edmonds_karp_demo.cc
changeset 134 e606071614f0
parent 105 a3c73e9b9b2e
child 138 c6297c121409
equal deleted inserted replaced
2:04dd273cf778 3:9f33637e5eea
    17   ListGraph G;
    17   ListGraph G;
    18   NodeIt s, t;
    18   NodeIt s, t;
    19   ListGraph::EdgeMap<int> cap(G);
    19   ListGraph::EdgeMap<int> cap(G);
    20   readDimacsMaxFlow(std::cin, G, s, t, cap);
    20   readDimacsMaxFlow(std::cin, G, s, t, cap);
    21 
    21 
    22 /*
    22   {
    23   double pre_time_copy=currTime();
    23   std::cout << "edmonds karp demo (blocking flow augmentation)..." << std::endl;
    24   ListGraph F;
       
    25   ListGraph::NodeMap<NodeIt> G_to_F(G);
       
    26   typedef ListGraph::EachNodeIt EachNodeIt;
       
    27   for(EachNodeIt n=G.first<EachNodeIt>(); n.valid(); ++n) {
       
    28     G_to_F.set(n, F.addNode());
       
    29   }
       
    30   for(EachEdgeIt e=G.first<EachEdgeIt>(); e.valid(); ++e) {
       
    31     F.addEdge(G_to_F.get(G.tail(e)), G_to_F.get(G.head(e)));
       
    32   }
       
    33   double post_time_copy=currTime();
       
    34   std::cout << "copy time: " << post_time_copy-pre_time_copy << " sec"<< std::endl; 
       
    35 */
       
    36 
       
    37   std::cout << "edmonds karp demo..." << std::endl;
       
    38   ListGraph::EdgeMap<int> flow(G); //0 flow
    24   ListGraph::EdgeMap<int> flow(G); //0 flow
    39 
    25 
    40   double pre_time=currTime();
    26   double pre_time=currTime();
    41   MaxFlow<ListGraph, int, ListGraph::EdgeMap<int>, ListGraph::EdgeMap<int> > max_flow_test(G, s, t, flow, cap);
    27   MaxFlow<ListGraph, int, ListGraph::EdgeMap<int>, ListGraph::EdgeMap<int> > max_flow_test(G, s, t, flow, cap);
    42   max_flow_test.augmentWithBlockingFlow();
    28   //max_flow_test.augmentWithBlockingFlow<ListGraph>();
    43   max_flow_test.run();
    29   max_flow_test.run<ListGraph>();
    44   double post_time=currTime();
    30   double post_time=currTime();
       
    31 
    45   //std::cout << "maximum flow: "<< std::endl;
    32   //std::cout << "maximum flow: "<< std::endl;
    46   //for(EachEdgeIt e=G.first<EachEdgeIt>(); e.valid(); ++e) { 
    33   //for(EachEdgeIt e=G.first<EachEdgeIt>(); e.valid(); ++e) { 
    47   //  std::cout<<"("<<G.tail(e)<< "-"<<flow.get(e)<<"->"<<G.head(e)<<") ";
    34   //  std::cout<<"("<<G.tail(e)<< "-"<<flow.get(e)<<"->"<<G.head(e)<<") ";
    48   //}
    35   //}
    49   //std::cout<<std::endl;
    36   //std::cout<<std::endl;
    50   std::cout << "elapsed time: " << post_time-pre_time << " sec"<< std::endl; 
    37   std::cout << "elapsed time: " << post_time-pre_time << " sec"<< std::endl; 
    51   std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl;
    38   std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl;
       
    39   }
       
    40 
       
    41   {
       
    42   std::cout << "edmonds karp demo (shortest path augmentation)..." << std::endl;
       
    43   ListGraph::EdgeMap<int> flow(G); //0 flow
       
    44 
       
    45   double pre_time=currTime();
       
    46   MaxFlow<ListGraph, int, ListGraph::EdgeMap<int>, ListGraph::EdgeMap<int> > max_flow_test(G, s, t, flow, cap);
       
    47   //max_flow_test.augmentWithBlockingFlow<ListGraph>();
       
    48   max_flow_test.run();
       
    49   double post_time=currTime();
       
    50 
       
    51   //std::cout << "maximum flow: "<< std::endl;
       
    52   //for(EachEdgeIt e=G.first<EachEdgeIt>(); e.valid(); ++e) { 
       
    53   //  std::cout<<"("<<G.tail(e)<< "-"<<flow.get(e)<<"->"<<G.head(e)<<") ";
       
    54   //}
       
    55   //std::cout<<std::endl;
       
    56   std::cout << "elapsed time: " << post_time-pre_time << " sec"<< std::endl; 
       
    57   std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl;
       
    58   }
    52 
    59 
    53   return 0;
    60   return 0;
    54 }
    61 }