The graph adadptors can be alteration observed.
In most cases it uses the adapted graph alteration notifiers.
Only special case is now the UndirGraphAdaptor, where
we have to proxy the signals from the graph.
The SubBidirGraphAdaptor is removed, because it doest not
gives more feature than the EdgeSubGraphAdaptor<UndirGraphAdaptor<Graph>>.
The ResGraphAdaptor is based on this composition.
3 * This file is a part of LEMON, a generic C++ optimization library
5 * Copyright (C) 2003-2006
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 (demo).
23 /// This program converts various DIMACS formats to the LEMON Graph Format
26 /// \include dim_to_lgf.cc
32 #include <lemon/smart_graph.h>
33 #include <lemon/dimacs.h>
34 #include <lemon/graph_writer.h>
37 using namespace lemon;
39 const char* versionString =
40 "dim_to_lgf - part of lemon library\n";
42 const char* helpString =
43 "DIMACS to LGF converter\n"
44 "Usage: dim_to_lgf [OPTIONS]\n"
47 " dim_to_lgf --type shortestpath --input graph.dim --output graph.lgf\n"
50 " -i FILE, --input FILE use FILE as input instead of standard input\n"
51 " -o FILE, --output FILE use FILE as output instead of standard output\n"
52 " -t TYPE, --type TYPE set up the type of the graph\n"
55 " maxflow (default)\n"
59 " -v, --version shows the version of the converter\n"
60 " -h, --help shows the help of the converter\n";
63 int main(int argc, const char *argv[]) {
64 typedef SmartGraph Graph;
66 typedef Graph::Edge Edge;
67 typedef Graph::Node Node;
68 typedef Graph::EdgeIt EdgeIt;
69 typedef Graph::NodeIt NodeIt;
70 typedef Graph::EdgeMap<double> DoubleMap;
72 std::string inputName;
73 std::string outputName;
79 for (int arg = 1; arg < argc; ++arg) {
80 if (strcmp(argv[arg], "--type") == 0 ||
81 strcmp(argv[arg], "-t") == 0) {
82 if (!typeName.empty()) {
83 cerr << "Multiple type description" << endl;
86 if (arg + 1 == argc) {
87 cerr << "Parameter without value" << endl;
90 typeName = argv[++arg];
92 else if (strcmp(argv[arg], "--input") == 0 ||
93 strcmp(argv[arg], "-i") == 0) {
94 if (!inputName.empty()) {
95 cerr << "Multiple input description" << endl;
98 if (arg + 1 == argc) {
99 cerr << "Parameter without value" << endl;
102 inputName = argv[++arg];
104 else if (strcmp(argv[arg], "--output") == 0 ||
105 strcmp(argv[arg], "-o") == 0) {
106 if (!outputName.empty()) {
107 cerr << "Multiple input description" << endl;
110 if (arg + 1 == argc) {
111 cerr << "Parameter without value" << endl;
114 outputName = argv[++arg];
115 } else if (strcmp(argv[arg], "--help") == 0 ||
116 strcmp(argv[arg], "-h") == 0) {
118 } else if (strcmp(argv[arg], "--version") == 0 ||
119 strcmp(argv[arg], "-v") == 0) {
122 cerr << "Invalid option: " << argv[arg] << endl;
128 cout << versionString;
133 if (help || version) {
138 if (!inputName.empty()) {
139 input.open(inputName.c_str());
141 cerr << "File open error" << endl;
145 istream& is = (inputName.empty() ? cin : input);
148 if (!outputName.empty()) {
149 output.open(outputName.c_str());
151 cerr << "File open error" << endl;
155 ostream& os = (outputName.empty() ? cout : output);
157 if (typeName.empty()) {
158 typeName = "maxflow";
161 if (typeName == "mincostflow") {
164 DoubleMap cost(graph), capacity(graph);
165 readDimacs(is, graph, capacity, s, t, cost);
166 GraphWriter<Graph>(os, graph).
167 writeEdgeMap("capacity", capacity).
168 writeNode("source", s).
169 writeNode("target", t).
170 writeEdgeMap("cost", cost).
172 } else if (typeName == "maxflow") {
175 DoubleMap capacity(graph);
176 readDimacs(is, graph, capacity, s, t);
177 GraphWriter<Graph>(os, graph).
178 writeEdgeMap("capacity", capacity).
179 writeNode("source", s).
180 writeNode("target", t).
182 } else if (typeName == "shortestpath") {
185 DoubleMap capacity(graph);
186 readDimacs(is, graph, capacity, s);
187 GraphWriter<Graph>(os, graph).
188 writeEdgeMap("capacity", capacity).
189 writeNode("source", s).
191 } else if (typeName == "capacitated") {
193 DoubleMap capacity(graph);
194 readDimacs(is, graph, capacity);
195 GraphWriter<Graph>(os, graph).
196 writeEdgeMap("capacity", capacity).
198 } else if (typeName == "plain") {
200 readDimacs(is, graph);
201 GraphWriter<Graph>(os, graph).run();
203 cerr << "Invalid type error" << endl;