alpar@10: #include alpar@9: #include alpar@9: #include alpar@9: #include alpar@9: #include alpar@9: #include alpar@11: #include alpar@9: alpar@11: std::string test_name = "circulation"; alpar@9: alpar@9: using namespace lemon; alpar@9: alpar@11: int testMain(std::istream &input) alpar@9: { alpar@9: typedef int Value; alpar@9: alpar@9: SmartDigraph g; alpar@9: alpar@9: SmartDigraph::ArcMap lo_cap(g); alpar@9: SmartDigraph::ArcMap up_cap(g); alpar@9: SmartDigraph::ArcMap cost(g); alpar@9: SmartDigraph::NodeMap sup(g); alpar@9: alpar@9: Timer ti; alpar@9: try { alpar@9: readDimacsMin(input, g, lo_cap, up_cap, cost, sup); alpar@9: } catch (FormatError& error) { alpar@9: std::cerr << error.what() << std::endl; alpar@9: return 1; alpar@9: } alpar@11: logTime("fread",ti); alpar@10: alpar@10: Timer tf; alpar@9: ti.restart(); alpar@9: Circulation,SmartDigraph::ArcMap, alpar@9: SmartDigraph::NodeMap > circ(g,lo_cap,up_cap,sup); alpar@10: logTime("setup",ti); alpar@9: ti.restart(); alpar@9: bool res = circ.run(); alpar@10: logTime("alg",ti); alpar@10: logTime("full",tf); alpar@9: if(res) alpar@9: { alpar@10: std::cerr << "A feasible circulation is found\n"; alpar@10: std::cerr << "Checking...\n"; alpar@9: ti.restart(); alpar@9: bool res2 = circ.checkFlow(); alpar@10: logTime("check",ti); alpar@9: if(res2) alpar@10: std::cerr << "Success!\n"; alpar@9: else alpar@10: std::cerr << "Oops!!!!\n"; alpar@9: } alpar@9: else alpar@9: { alpar@10: std::cerr << "A dual solution is found\n"; alpar@10: std::cerr << "Checking...\n"; alpar@9: ti.restart(); alpar@9: bool res2 = circ.checkBarrier(); alpar@10: logTime("check",ti); alpar@9: if(res2) alpar@10: std::cerr << "Success!\n"; alpar@9: else alpar@10: std::cerr << "Dual-Oops!!!!\n"; alpar@9: alpar@9: } alpar@9: } alpar@9: