Several changes. \n If new map is added to mapstorage it emits signal with the name of the new map. This was important, because from now on not only tha mapwin should be updated. \n Furthermore algobox gets a pointer to mapstorage instead of only the mapnames from it. This is important because without it it would be complicated to pass all of the required maps to algobox.
2 * demo/dim_to_lgf.cc - Part of LEMON, a generic C++ optimization library
4 * Copyright (C) 2006 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
5 * (Egervary Research Group on Combinatorial Optimization, EGRES).
7 * Permission to use, modify and distribute this software is granted
8 * provided that this copyright notice appears in all copies. For
9 * precise terms see the accompanying LICENSE file.
11 * This software is provided "AS IS" with no warranty of any kind,
12 * express or implied, and with no claim as to its suitability for any
19 ///\brief DIMACS to LGF converter (demo).
21 /// This program converts various DIMACS formats to the LEMON Graph Format
24 /// \include dim_to_lgf.cc
30 #include <lemon/smart_graph.h>
31 #include <lemon/dimacs.h>
32 #include <lemon/graph_writer.h>
35 using namespace lemon;
37 const char* versionString =
38 "dim_to_lgf - part of lemon library\n";
40 const char* helpString =
41 "DIMACS to LGF converter\n"
42 "Usage: dim_to_lgf [OPTIONS]\n"
45 " dim_to_lgf --type shortestpath --input graph.dim --output graph.lgf\n"
48 " -i FILE, --input FILE use FILE as input instead of standard input\n"
49 " -o FILE, --output FILE use FILE as output instead of standard output\n"
50 " -t TYPE, --type TYPE set up the type of the graph\n"
53 " maxflow (default)\n"
57 " -v, --version shows the version of the converter\n"
58 " -h, --help shows the help of the converter\n";
61 int main(int argc, const char *argv[]) {
62 typedef SmartGraph Graph;
64 typedef Graph::Edge Edge;
65 typedef Graph::Node Node;
66 typedef Graph::EdgeIt EdgeIt;
67 typedef Graph::NodeIt NodeIt;
68 typedef Graph::EdgeMap<double> DoubleMap;
70 std::string inputName;
71 std::string outputName;
77 for (int arg = 1; arg < argc; ++arg) {
78 if (strcmp(argv[arg], "--type") == 0 ||
79 strcmp(argv[arg], "-t") == 0) {
80 if (!typeName.empty()) {
81 cerr << "Multiple type description" << endl;
84 if (arg + 1 == argc) {
85 cerr << "Parameter without value" << endl;
88 typeName = argv[++arg];
90 else if (strcmp(argv[arg], "--input") == 0 ||
91 strcmp(argv[arg], "-i") == 0) {
92 if (!inputName.empty()) {
93 cerr << "Multiple input description" << endl;
96 if (arg + 1 == argc) {
97 cerr << "Parameter without value" << endl;
100 inputName = argv[++arg];
102 else if (strcmp(argv[arg], "--output") == 0 ||
103 strcmp(argv[arg], "-o") == 0) {
104 if (!outputName.empty()) {
105 cerr << "Multiple input description" << endl;
108 if (arg + 1 == argc) {
109 cerr << "Parameter without value" << endl;
112 outputName = argv[++arg];
113 } else if (strcmp(argv[arg], "--help") == 0 ||
114 strcmp(argv[arg], "-h") == 0) {
116 } else if (strcmp(argv[arg], "--version") == 0 ||
117 strcmp(argv[arg], "-v") == 0) {
120 cerr << "Invalid option: " << argv[arg] << endl;
126 cout << versionString;
131 if (help || version) {
136 if (!inputName.empty()) {
137 input.open(inputName.c_str());
139 cerr << "File open error" << endl;
143 istream& is = (inputName.empty() ? cin : input);
146 if (!outputName.empty()) {
147 output.open(outputName.c_str());
149 cerr << "File open error" << endl;
153 ostream& os = (outputName.empty() ? cout : output);
155 if (typeName.empty()) {
156 typeName = "maxflow";
159 if (typeName == "mincostflow") {
162 DoubleMap cost(graph), capacity(graph);
163 readDimacs(is, graph, capacity, s, t, cost);
164 GraphWriter<Graph>(os, graph).
165 writeEdgeMap("capacity", capacity).
166 writeNode("source", s).
167 writeNode("target", t).
168 writeEdgeMap("cost", cost).
170 } else if (typeName == "maxflow") {
173 DoubleMap capacity(graph);
174 readDimacs(is, graph, capacity, s, t);
175 GraphWriter<Graph>(os, graph).
176 writeEdgeMap("capacity", capacity).
177 writeNode("source", s).
178 writeNode("target", t).
180 } else if (typeName == "shortestpath") {
183 DoubleMap capacity(graph);
184 readDimacs(is, graph, capacity, s);
185 GraphWriter<Graph>(os, graph).
186 writeEdgeMap("capacity", capacity).
187 writeNode("source", s).
189 } else if (typeName == "capacitated") {
191 DoubleMap capacity(graph);
192 readDimacs(is, graph, capacity);
193 GraphWriter<Graph>(os, graph).
194 writeEdgeMap("capacity", capacity).
196 } else if (typeName == "plain") {
198 readDimacs(is, graph);
199 GraphWriter<Graph>(os, graph).run();
201 cerr << "Invalid type error" << endl;