jacint@109: #include jacint@109: #include jacint@109: jacint@109: #include jacint@109: #include jacint@109: #include jacint@109: #include jacint@109: jacint@109: using namespace hugo; jacint@109: jacint@109: // Use a DIMACS max flow file as stdin. jacint@109: // read_dimacs_demo < dimacs_max_flow_file jacint@109: int main(int, char **) { jacint@109: typedef ListGraph::NodeIt NodeIt; jacint@109: typedef ListGraph::EachEdgeIt EachEdgeIt; jacint@109: typedef ListGraph::EachNodeIt EachNodeIt; jacint@109: jacint@109: ListGraph G; jacint@109: NodeIt s, t; jacint@109: ListGraph::EdgeMap cap(G); jacint@109: readDimacsMaxFlow(std::cin, G, s, t, cap); jacint@109: jacint@109: std::cout << "preflow_max_flow demo ..." << std::endl; jacint@109: jacint@109: double pre_time=currTime(); jacint@109: preflow_max_flow max_flow_test(G, s, t, cap); jacint@109: ListGraph::NodeMap cut=max_flow_test.minCut(); jacint@109: double post_time=currTime(); jacint@109: jacint@109: int cut_value=0; jacint@109: for(EachEdgeIt e=G.first(); e.valid(); ++e) { jacint@109: if (cut.get(G.tail(e)) && !cut.get(G.head(e))) cut_value+=cap.get(e); jacint@109: } jacint@109: jacint@109: std::cout << "elapsed time: " << post_time-pre_time << " sec"<< std::endl; jacint@109: std::cout << "flow value: "<< max_flow_test.maxFlow() << std::endl; jacint@109: std::cout << "cut value: "<< cut_value << std::endl; jacint@109: jacint@109: return 0; jacint@109: }