[Lemon-commits] Peter Kovacs: Support min cost flow in dimacs-so...
Lemon HG
hg at lemon.cs.elte.hu
Tue Apr 21 16:33:30 CEST 2009
details: http://lemon.cs.elte.hu/hg/lemon/rev/a79ef774fae1
changeset: 634:a79ef774fae1
user: Peter Kovacs <kpeter [at] inf.elte.hu>
date: Tue Feb 24 09:52:26 2009 +0100
description:
Support min cost flow in dimacs-solver (#234)
diffstat:
tools/dimacs-solver.cc | 27 +++++++++++++++++++++++++--
1 files changed, 25 insertions(+), 2 deletions(-)
diffs (51 lines):
diff --git a/tools/dimacs-solver.cc b/tools/dimacs-solver.cc
--- a/tools/dimacs-solver.cc
+++ b/tools/dimacs-solver.cc
@@ -44,6 +44,7 @@
#include <lemon/dijkstra.h>
#include <lemon/preflow.h>
#include <lemon/max_matching.h>
+#include <lemon/network_simplex.h>
using namespace lemon;
typedef SmartDigraph Digraph;
@@ -91,6 +92,29 @@
if(report) std::cerr << "\nMax flow value: " << pre.flowValue() << '\n';
}
+template<class Value>
+void solve_min(ArgParser &ap, std::istream &is, std::ostream &,
+ DimacsDescriptor &desc)
+{
+ bool report = !ap.given("q");
+ Digraph g;
+ Digraph::ArcMap<Value> lower(g), cap(g), cost(g);
+ Digraph::NodeMap<Value> sup(g);
+ Timer ti;
+ ti.restart();
+ readDimacsMin(is, g, lower, cap, cost, sup, desc);
+ if (report) std::cerr << "Read the file: " << ti << '\n';
+ ti.restart();
+ NetworkSimplex< Digraph, Digraph::ArcMap<Value>, Digraph::ArcMap<Value>,
+ Digraph::ArcMap<Value>, Digraph::NodeMap<Value> >
+ ns(g, lower, cap, cost, sup);
+ if (report) std::cerr << "Setup NetworkSimplex class: " << ti << '\n';
+ ti.restart();
+ ns.run();
+ if (report) std::cerr << "Run NetworkSimplex: " << ti << '\n';
+ if (report) std::cerr << "\nMin flow cost: " << ns.totalCost() << '\n';
+}
+
void solve_mat(ArgParser &ap, std::istream &is, std::ostream &,
DimacsDescriptor &desc)
{
@@ -118,8 +142,7 @@
switch(desc.type)
{
case DimacsDescriptor::MIN:
- std::cerr <<
- "\n\n Sorry, the min. cost flow solver is not yet available.\n";
+ solve_min<Value>(ap,is,os,desc);
break;
case DimacsDescriptor::MAX:
solve_max<Value>(ap,is,os,desc);
More information about the Lemon-commits
mailing list