tests/circulation.cc
author Alpar Juttner <alpar@cs.elte.hu>
Sun, 11 Dec 2011 06:55:47 +0100
changeset 9 7768d68909e8
child 10 d7ce0311ece2
permissions -rw-r--r--
Circulation test code added
alpar@9
     1
#include <lemon/circulation.h>
alpar@9
     2
#include <lemon/smart_graph.h>
alpar@9
     3
#include <lemon/lgf_reader.h>
alpar@9
     4
#include <lemon/dimacs.h>
alpar@9
     5
#include <lemon/time_measure.h>
alpar@9
     6
#include <lemon/error.h>
alpar@9
     7
alpar@9
     8
const char test_name[] = "circulation";
alpar@9
     9
alpar@9
    10
using namespace lemon;
alpar@9
    11
alpar@9
    12
int main(int argc, char **argv)
alpar@9
    13
{
alpar@9
    14
  if(argc!=2) exit(1);
alpar@9
    15
alpar@9
    16
  typedef int Value;
alpar@9
    17
  
alpar@9
    18
  SmartDigraph g;
alpar@9
    19
  
alpar@9
    20
  SmartDigraph::ArcMap<Value> lo_cap(g);
alpar@9
    21
  SmartDigraph::ArcMap<Value> up_cap(g);
alpar@9
    22
  SmartDigraph::ArcMap<Value> cost(g);
alpar@9
    23
  SmartDigraph::NodeMap<Value> sup(g);
alpar@9
    24
  
alpar@9
    25
  Timer ti;
alpar@9
    26
  try {
alpar@9
    27
    std::ifstream input;
alpar@9
    28
    input.open(argv[1]);
alpar@9
    29
    readDimacsMin(input, g, lo_cap, up_cap, cost, sup);
alpar@9
    30
  } catch (FormatError& error) {
alpar@9
    31
    std::cerr << error.what() << std::endl;
alpar@9
    32
    return 1;
alpar@9
    33
  }
alpar@9
    34
  std::cerr << "Read the file: " << ti << '\n';
alpar@9
    35
  ti.restart();
alpar@9
    36
  
alpar@9
    37
  Circulation<SmartDigraph,
alpar@9
    38
    SmartDigraph::ArcMap<Value>,SmartDigraph::ArcMap<Value>,
alpar@9
    39
    SmartDigraph::NodeMap<Value> > circ(g,lo_cap,up_cap,sup);
alpar@9
    40
  std::cerr << "Setup Circulation class: " << ti << '\n';
alpar@9
    41
  ti.restart();
alpar@9
    42
  bool res = circ.run();
alpar@9
    43
  if(res)
alpar@9
    44
    {
alpar@9
    45
      std::cerr << "A feasible circulation is found: " << ti << "\n";
alpar@9
    46
      ti.restart();
alpar@9
    47
      bool res2 = circ.checkFlow();
alpar@9
    48
      std::cerr << "Checked in time " << ti << "\n";
alpar@9
    49
      if(res2)
alpar@9
    50
        std::cerr << "Success!\nn";
alpar@9
    51
      else
alpar@9
    52
        std::cerr << "Oops!!!!\n\n";
alpar@9
    53
    }
alpar@9
    54
  else
alpar@9
    55
    {
alpar@9
    56
      std::cerr << "A dual solution is found: " << ti << "\n";
alpar@9
    57
      ti.restart();
alpar@9
    58
      bool res2 = circ.checkBarrier();
alpar@9
    59
      std::cerr << "Checked in time " << ti << "\n";
alpar@9
    60
      if(res2)
alpar@9
    61
        std::cerr << "Success!\nn";
alpar@9
    62
      else
alpar@9
    63
        std::cerr << "Dual-Oops!!!!\n\n";
alpar@9
    64
alpar@9
    65
    }
alpar@9
    66
}
alpar@9
    67