1 /* -*- mode: C++; indent-tabs-mode: nil; -*-
3 * This file is a part of LEMON, a generic C++ optimization library.
5 * Copyright (C) 2003-2009
6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
7 * (Egervary Research Group on Combinatorial Optimization, EGRES).
9 * Permission to use, modify and distribute this software is granted
10 * provided that this copyright notice appears in all copies. For
11 * precise terms see the accompanying LICENSE file.
13 * This software is provided "AS IS" with no warranty of any kind,
14 * express or implied, and with no claim as to its suitability for any
21 ///\brief DIMACS to LGF converter.
23 /// This program converts various DIMACS formats to the LEMON Digraph Format
28 /// dimacs-to-lgf --help
30 /// for more info on the usage.
36 #include <lemon/smart_graph.h>
37 #include <lemon/dimacs.h>
38 #include <lemon/lgf_writer.h>
40 #include <lemon/arg_parser.h>
41 #include <lemon/error.h>
44 using namespace lemon;
47 int main(int argc, const char *argv[]) {
48 typedef SmartDigraph Digraph;
50 typedef Digraph::Arc Arc;
51 typedef Digraph::Node Node;
52 typedef Digraph::ArcIt ArcIt;
53 typedef Digraph::NodeIt NodeIt;
54 typedef Digraph::ArcMap<double> DoubleArcMap;
55 typedef Digraph::NodeMap<double> DoubleNodeMap;
57 std::string inputName;
58 std::string outputName;
60 ArgParser ap(argc, argv);
61 ap.other("[INFILE [OUTFILE]]",
62 "If either the INFILE or OUTFILE file is missing the standard\n"
63 " input/output will be used instead.")
69 switch(ap.files().size())
72 output.open(ap.files()[1].c_str());
74 throw IoError("Cannot open the file for writing", ap.files()[1]);
77 input.open(ap.files()[0].c_str());
79 throw IoError("File cannot be found", ap.files()[0]);
84 cerr << ap.commandName() << ": too many arguments\n";
87 istream& is = (ap.files().size()<1 ? cin : input);
88 ostream& os = (ap.files().size()<2 ? cout : output);
90 DimacsDescriptor desc = dimacsType(is);
93 case DimacsDescriptor::MIN:
96 DoubleArcMap lower(digraph), capacity(digraph), cost(digraph);
97 DoubleNodeMap supply(digraph);
98 readDimacsMin(is, digraph, lower, capacity, cost, supply, 0, desc);
99 DigraphWriter<Digraph>(digraph, os).
100 nodeMap("supply", supply).
101 arcMap("lower", lower).
102 arcMap("capacity", capacity).
103 arcMap("cost", cost).
104 attribute("problem","min").
108 case DimacsDescriptor::MAX:
112 DoubleArcMap capacity(digraph);
113 readDimacsMax(is, digraph, capacity, s, t, 0, desc);
114 DigraphWriter<Digraph>(digraph, os).
115 arcMap("capacity", capacity).
118 attribute("problem","max").
122 case DimacsDescriptor::SP:
126 DoubleArcMap capacity(digraph);
127 readDimacsSp(is, digraph, capacity, s, desc);
128 DigraphWriter<Digraph>(digraph, os).
129 arcMap("capacity", capacity).
131 attribute("problem","sp").
135 case DimacsDescriptor::MAT:
138 readDimacsMat(is, digraph,desc);
139 DigraphWriter<Digraph>(digraph, os).
140 attribute("problem","mat").