NewMapWin has become Dialog instead of Window. Therefore it is created dynamically, when there is need for it, instead of keeping one instance in memory. This solution is slower, but more correct than before.
2 * lemon/dimacs.h - Part of LEMON, a generic C++ optimization library
4 * Copyright (C) 2005 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
17 #ifndef LEMON_DIMACS_H
18 #define LEMON_DIMACS_H
23 #include <lemon/maps.h>
24 #include <lemon/invalid.h>
26 /// \ingroup dimacs_group
28 /// \brief Dimacs file format reader.
33 ///@defgroup dimacs_group DIMACS format
34 ///\brief Read and write files in DIMACS format
36 ///Tools to read a graph from or write it to a file in DIMACS format
40 /// \addtogroup dimacs_group
43 /// Dimacs min cost flow reader function.
45 /// This function reads a min cost flow instance from dimacs format,
46 /// i.e. from dimacs files having a line starting with
50 /// At the beginning \c g is cleared by \c g.clear(). The edge
51 /// capacities are written to \c capacity, \c s and \c t are set to
52 /// the source and the target nodes resp. and the cost of the edges
53 /// are written to \c cost.
55 /// \author Marton Makai
56 template<typename Graph, typename CapacityMap, typename CostMap>
57 void readDimacs(std::istream& is, Graph &g, CapacityMap& capacity,
58 typename Graph::Node &s, typename Graph::Node &t,
61 typename CapacityMap::Value _cap;
62 typename CostMap::Value _cost;
69 typename Graph::Edge e;
70 std::vector<typename Graph::Node> nodes;
76 case 'p': //problem definition
77 is >> problem >> n >> m;
80 for (int k=1; k<=n; ++k) nodes[k]=g.addNode();
82 case 'n': //node definition
83 if (problem=="sp") { //shortest path problem
88 if (problem=="max" || problem=="min") { //((max) or (min cost)) flow problem
91 if (d=='s') s=nodes[i];
92 if (d=='t') t=nodes[i];
96 if ( problem == "max" || problem == "sp") {
99 e=g.addEdge(nodes[i], nodes[j]);
101 capacity.set(e, _cap);
103 if ( problem == "min" ) {
104 is >> i >> j >> _cap >> _cost;
106 e=g.addEdge(nodes[i], nodes[j]);
108 capacity.set(e, _cap);
114 g.addEdge(nodes[i], nodes[j]);
123 /// Dimacs max flow reader function.
125 /// This function reads a max flow instance from dimacs format,
126 /// i.e. from dimacs files having a line starting with
130 ///At the beginning \c g is cleared by \c g.clear(). The
131 /// edge capacities are written to \c capacity and \c s and \c t are
132 /// set to the source and the target nodes.
134 /// \author Marton Makai
135 template<typename Graph, typename CapacityMap>
136 void readDimacs(std::istream& is, Graph &g, CapacityMap& capacity,
137 typename Graph::Node &s, typename Graph::Node &t) {
138 NullMap<typename Graph::Edge, int> n;
139 readDimacs(is, g, capacity, s, t, n);
143 /// Dimacs shortest path reader function.
145 /// This function reads a shortest path instance from dimacs format,
146 /// i.e. from dimacs files having a line starting with
150 /// At the beginning \c g is cleared by \c g.clear(). The edge
151 /// capacities are written to \c capacity and \c s is set to the
154 /// \author Marton Makai
155 template<typename Graph, typename CapacityMap>
156 void readDimacs(std::istream& is, Graph &g, CapacityMap& capacity,
157 typename Graph::Node &s) {
158 NullMap<typename Graph::Edge, int> n;
159 readDimacs(is, g, capacity, s, s, n);
163 /// Dimacs capacitated graph reader function.
165 /// This function reads an edge capacitated graph instance from
166 /// dimacs format. At the beginning \c g is cleared by \c g.clear()
167 /// and the edge capacities are written to \c capacity.
169 /// \author Marton Makai
170 template<typename Graph, typename CapacityMap>
171 void readDimacs(std::istream& is, Graph &g, CapacityMap& capacity) {
172 typename Graph::Node u;
173 NullMap<typename Graph::Edge, int> n;
174 readDimacs(is, g, capacity, u, u, n);
178 /// Dimacs plain graph reader function.
180 /// This function reads a graph without any designated nodes and
181 /// maps from dimacs format, i.e. from dimacs files having a line
186 /// At the beginning \c g is cleared
189 /// \author Marton Makai
190 template<typename Graph>
191 void readDimacs(std::istream& is, Graph &g) {
192 typename Graph::Node u;
193 NullMap<typename Graph::Edge, int> n;
194 readDimacs(is, g, n, u, u, n);
200 /// write matching problem
201 template<typename Graph>
202 void writeDimacs(std::ostream& os, const Graph &g) {
203 typedef typename Graph::NodeIt NodeIt;
204 typedef typename Graph::EdgeIt EdgeIt;
206 typename Graph::template NodeMap<int> nodes(g);
208 os << "c matching problem" << std::endl;
211 for(NodeIt v(g); v!=INVALID; ++v) {
216 os << "p mat " << g.nodeNum() << " " << g.edgeNum() << std::endl;
218 for(EdgeIt e(g); e!=INVALID; ++e) {
219 os << "a " << nodes[g.source(e)] << " " << nodes[g.target(e)] << std::endl;
228 #endif //LEMON_DIMACS_H