circulation_demo.cc File Reference
Detailed Description
This demo program reads a general network circulation problem from the file 'circulation-input.lgf', runs the preflow based algorithm for finding a feasible solution and writes the output to 'circulation-input.lgf'
#include <iostream>
#include <lemon/list_graph.h>
#include <lemon/circulation.h>
#include <lemon/graph_reader.h>
#include <lemon/graph_writer.h>
using namespace lemon;
int main (int, char*[])
{
typedef ListGraph Graph;
typedef Graph::Node Node;
typedef Graph::NodeIt NodeIt;
typedef Graph::Edge Edge;
typedef Graph::EdgeIt EdgeIt;
typedef Graph::EdgeMap<int> EdgeMap;
typedef Graph::NodeMap<int> NodeMap;
typedef Graph::NodeMap<double> DNodeMap;
Graph g;
EdgeMap lo(g);
EdgeMap up(g);
NodeMap delta(g);
NodeMap nid(g);
EdgeMap eid(g);
DNodeMap cx(g);
DNodeMap cy(g);
GraphReader<Graph>("circulation-input.lgf", g).
readEdgeMap("lo_cap", lo).
readEdgeMap("up_cap", up).
readNodeMap("delta", delta).
readEdgeMap("label", eid).
readNodeMap("label", nid).
readNodeMap("coordinates_x", cx).
readNodeMap("coordinates_y", cy).
run();
Circulation<Graph> gen(g,lo,up,delta);
bool ret=gen.run();
if(ret)
{
std::cout << "\nA feasible flow has been found.\n";
if(!gen.checkFlow()) std::cerr << "Oops!!!\n";
GraphWriter<Graph>("circulation-output.lgf", g).
writeEdgeMap("lo_cap", lo).
writeEdgeMap("up_cap", up).
writeEdgeMap("flow", gen.flowMap()).
writeNodeMap("delta", delta).
writeEdgeMap("label", eid).
writeNodeMap("label", nid).
writeNodeMap("coordinates_x", cx).
writeNodeMap("coordinates_y", cy).
run();
}
else {
std::cout << "\nThere is no such a flow\n";
Graph::NodeMap<int> bar(g);
gen.barrierMap(bar);
if(!gen.checkBarrier()) std::cerr << "Dual Oops!!!\n";
GraphWriter<Graph>("circulation-output.lgf", g).
writeEdgeMap("lo_cap", lo).
writeEdgeMap("up_cap", up).
writeNodeMap("barrier", bar).
writeNodeMap("delta", delta).
writeEdgeMap("label", eid).
writeNodeMap("label", nid).
writeNodeMap("coordinates_x", cx).
writeNodeMap("coordinates_y", cy).
run();
}
std::cout << "The output is written to file 'circulation-output.lgf'\n\n";
}
#include <iostream>
#include <lemon/list_graph.h>
#include <lemon/circulation.h>
#include <lemon/graph_reader.h>
#include <lemon/graph_writer.h>