gravatar
kpeter (Peter Kovacs)
kpeter@inf.elte.hu
Support min cost flow in dimacs-solver (#234)
0 1 0
default
1 file changed with 25 insertions and 2 deletions:
↑ Collapse diff ↑
Show white space 6 line context
... ...
@@ -46,2 +46,3 @@
46 46
#include <lemon/max_matching.h>
47
#include <lemon/network_simplex.h>
47 48

	
... ...
@@ -93,2 +94,25 @@
93 94

	
95
template<class Value>
96
void solve_min(ArgParser &ap, std::istream &is, std::ostream &,
97
               DimacsDescriptor &desc)
98
{
99
  bool report = !ap.given("q");
100
  Digraph g;
101
  Digraph::ArcMap<Value> lower(g), cap(g), cost(g);
102
  Digraph::NodeMap<Value> sup(g);
103
  Timer ti;
104
  ti.restart();
105
  readDimacsMin(is, g, lower, cap, cost, sup, desc);
106
  if (report) std::cerr << "Read the file: " << ti << '\n';
107
  ti.restart();
108
  NetworkSimplex< Digraph, Digraph::ArcMap<Value>, Digraph::ArcMap<Value>,
109
                  Digraph::ArcMap<Value>, Digraph::NodeMap<Value> >
110
    ns(g, lower, cap, cost, sup);
111
  if (report) std::cerr << "Setup NetworkSimplex class: " << ti << '\n';
112
  ti.restart();
113
  ns.run();
114
  if (report) std::cerr << "Run NetworkSimplex: " << ti << '\n';
115
  if (report) std::cerr << "\nMin flow cost: " << ns.totalCost() << '\n';
116
}
117

	
94 118
void solve_mat(ArgParser &ap, std::istream &is, std::ostream &,
... ...
@@ -120,4 +144,3 @@
120 144
    case DimacsDescriptor::MIN:
121
      std::cerr <<
122
        "\n\n Sorry, the min. cost flow solver is not yet available.\n";
145
      solve_min<Value>(ap,is,os,desc);
123 146
      break;
0 comments (0 inline)