#include #include #include #include #include #include using namespace hugo; // Use a DIMACS max flow file as stdin. // read_dimacs_demo < dimacs_max_flow_file int main(int, char **) { typedef ListGraph::Node Node; typedef ListGraph::EdgeIt EdgeIt; ListGraph G; Node s, t; ListGraph::EdgeMap cap(G); readDimacsMaxFlow(std::cin, G, s, t, cap); std::cout << "preflow demo ..." << std::endl; double mintime=1000000; for ( int i=1; i!=11; ++i ) { ListGraph::EdgeMap flow(G); double pre_time=currTime(); Preflow max_flow_test(G, s, t, cap, flow); max_flow_test.run(); double post_time=currTime(); if ( mintime > post_time-pre_time ) mintime = post_time-pre_time; } ListGraph::EdgeMap flow(G); Preflow max_flow_test(G, s, t, cap, flow); max_flow_test.run(); ListGraph::NodeMap cut(G); max_flow_test.minCut(cut); int min_cut_value=0; EdgeIt e; for(G.first(e); G.valid(e); G.next(e)) { if (cut.get(G.tail(e)) && !cut.get(G.head(e))) min_cut_value+=cap.get(e); } ListGraph::NodeMap cut1(G); max_flow_test.minMinCut(cut1); int min_min_cut_value=0; for(G.first(e); G.valid(e); G.next(e)) { if (cut.get(G.tail(e)) && !cut.get(G.head(e))) min_min_cut_value+=cap.get(e); } ListGraph::NodeMap cut2(G); max_flow_test.maxMinCut(cut2); int max_min_cut_value=0; for(G.first(e); G.valid(e); G.next(e)) { if (cut2.get(G.tail(e)) && !cut2.get(G.head(e))) max_min_cut_value+=cap.get(e); } std::cout << "min time of 10 runs: " << mintime << " sec"<< std::endl; std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; std::cout << "min cut value: "<< min_cut_value << std::endl; std::cout << "min min cut value: "<< min_min_cut_value << std::endl; std::cout << "max min cut value: "<< max_min_cut_value << std::endl<< std::endl; return 0; }