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 usage.
37 #include <lemon/smart_graph.h>
38 #include <lemon/dimacs.h>
39 #include <lemon/lgf_writer.h>
41 #include <lemon/arg_parser.h>
42 #include <lemon/error.h>
45 using namespace lemon;
48 int main(int argc, const char *argv[]) {
49 typedef SmartDigraph Digraph;
51 typedef Digraph::Arc Arc;
52 typedef Digraph::Node Node;
53 typedef Digraph::ArcIt ArcIt;
54 typedef Digraph::NodeIt NodeIt;
55 typedef Digraph::ArcMap<double> DoubleArcMap;
56 typedef Digraph::NodeMap<double> DoubleNodeMap;
58 std::string inputName;
59 std::string outputName;
61 ArgParser ap(argc, argv);
62 ap.other("[INFILE [OUTFILE]]",
63 "If either the INFILE or OUTFILE file is missing the standard\n"
64 " input/output will be used instead.")
70 switch(ap.files().size())
73 output.open(ap.files()[1].c_str());
75 throw IoError("Cannot open the file for writing", ap.files()[1]);
78 input.open(ap.files()[0].c_str());
80 throw IoError("File cannot be found", ap.files()[0]);
85 cerr << ap.commandName() << ": too many arguments\n";
88 istream& is = (ap.files().size()<1 ? cin : input);
89 ostream& os = (ap.files().size()<2 ? cout : output);
91 DimacsDescriptor desc = dimacsType(is);
94 case DimacsDescriptor::MIN:
97 DoubleArcMap lower(digraph), capacity(digraph), cost(digraph);
98 DoubleNodeMap supply(digraph);
99 readDimacsMin(is, digraph, lower, capacity, cost, supply, desc);
100 DigraphWriter<Digraph>(digraph, os).
101 nodeMap("supply", supply).
102 arcMap("lower", lower).
103 arcMap("capacity", capacity).
104 arcMap("cost", cost).
105 attribute("problem","min").
109 case DimacsDescriptor::MAX:
113 DoubleArcMap capacity(digraph);
114 readDimacsMax(is, digraph, capacity, s, t, desc);
115 DigraphWriter<Digraph>(digraph, os).
116 arcMap("capacity", capacity).
119 attribute("problem","max").
123 case DimacsDescriptor::SP:
127 DoubleArcMap capacity(digraph);
128 readDimacsSp(is, digraph, capacity, s, desc);
129 DigraphWriter<Digraph>(digraph, os).
130 arcMap("capacity", capacity).
132 attribute("problem","sp").
136 case DimacsDescriptor::MAT:
139 readDimacsMat(is, digraph,desc);
140 DigraphWriter<Digraph>(digraph, os).
141 attribute("problem","mat").