3 * This file is a part of LEMON, a generic C++ optimization library
5 * Copyright (C) 2003-2007
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
20 @defgroup datas Data Structures
21 This group describes the several graph structures implemented in LEMON.
25 @defgroup graphs Graph Structures
27 \brief Graph structures implemented in LEMON.
29 The implementation of combinatorial algorithms heavily relies on
30 efficient graph implementations. LEMON offers data structures which are
31 planned to be easily used in an experimental phase of implementation studies,
32 and thereafter the program code can be made efficient by small modifications.
34 The most efficient implementation of diverse applications require the
35 usage of different physical graph implementations. These differences
36 appear in the size of graph we require to handle, memory or time usage
37 limitations or in the set of operations through which the graph can be
38 accessed. LEMON provides several physical graph structures to meet
39 the diverging requirements of the possible users. In order to save on
40 running time or on memory usage, some structures may fail to provide
41 some graph features like edge or node deletion.
43 Alteration of standard containers need a very limited number of
44 operations, these together satisfy the everyday requirements.
45 In the case of graph structures, different operations are needed which do
46 not alter the physical graph, but gives another view. If some nodes or
47 edges have to be hidden or the reverse oriented graph have to be used, then
48 this is the case. It also may happen that in a flow implementation
49 the residual graph can be accessed by another algorithm, or a node-set
50 is to be shrunk for another algorithm.
51 LEMON also provides a variety of graphs for these requirements called
52 \ref graph_adaptors "graph adaptors". Adaptors cannot be used alone but only
53 in conjunction with other graph representation.
55 You are free to use the graph structure that fit your requirements
56 the best, most graph algorithms and auxiliary data structures can be used
57 with any graph structures.
61 @defgroup semi_adaptors Semi-Adaptors Classes for Graphs
63 \brief Graph types between real graphs and graph adaptors.
65 Graph types between real graphs and graph adaptors. These classes wrap
66 graphs to give new functionality as the adaptors do it. On the other
67 hand they are not light-weight structures as the adaptors.
73 \brief Some special purpose map to make life easier.
75 LEMON provides several special maps that e.g. combine
76 new maps from existing ones.
80 @defgroup graph_maps Graph Maps
82 \brief Special Graph-Related Maps.
84 These maps are specifically designed to assign values to the nodes and edges of
90 \defgroup map_adaptors Map Adaptors
92 \brief Tools to create new maps from existing ones
94 Map adaptors are used to create "implicit" maps from other maps.
96 Most of them are \ref lemon::concepts::ReadMap "ReadMap"s. They can
97 make arithmetic operations between one or two maps (negation, scaling,
98 addition, multiplication etc.) or e.g. convert a map to another one
99 of different Value type.
103 @defgroup matrices Matrices
105 \brief Two dimensional data storages.
107 Two dimensional data storages.
111 @defgroup paths Path Structures
113 \brief Path structures implemented in LEMON.
115 LEMON provides flexible data structures
118 All of them have the same interface, especially they can be built or extended
119 using a standard Builder subclass. This make is easy to have e.g. the Dijkstra
120 algorithm to store its result in any kind of path structure.
122 \sa lemon::concepts::Path
127 @defgroup auxdat Auxiliary Data Structures
129 \brief Some data structures implemented in LEMON.
131 This group describes the data structures implemented in LEMON in
132 order to make it easier to implement combinatorial algorithms.
137 @defgroup algs Algorithms
138 \brief This group describes the several algorithms
139 implemented in LEMON.
141 This group describes the several algorithms
142 implemented in LEMON.
146 @defgroup search Graph Search
148 \brief This group contains the common graph
151 This group contains the common graph
152 search algorithms like Bfs and Dfs.
156 @defgroup shortest_path Shortest Path algorithms
158 \brief This group describes the algorithms
159 for finding shortest paths.
161 This group describes the algorithms for finding shortest paths in
167 @defgroup max_flow Maximum Flow algorithms
169 \brief This group describes the algorithms for finding maximum flows.
171 This group describes the algorithms for finding maximum flows and
172 feasible circulations.
175 \image latex flow.eps "Graph flow" width=\textwidth
179 @defgroup min_cost_flow Minimum Cost Flow algorithms
182 \brief This group describes the algorithms
183 for finding minimum cost flows and circulations.
185 This group describes the algorithms for finding minimum cost flows and
190 @defgroup min_cut Minimum Cut algorithms
192 \brief This group describes the algorithms
193 for finding minimum cut in graphs.
195 This group describes the algorithms
196 for finding minimum cut in graphs.
200 @defgroup graph_prop Connectivity and other graph properties
202 \brief This group describes the algorithms
203 for discover the graph properties
205 This group describes the algorithms for discover the graph properties
206 like connectivity, bipartiteness, euler property, simplicity, etc...
208 \image html edge_biconnected_components.png
209 \image latex edge_biconnected_components.eps "bi-edge-connected components" width=\textwidth
213 @defgroup matching Matching algorithms
215 \brief This group describes the algorithms
216 for find matchings in graphs and bipartite graphs.
218 This group provides some algorithm objects and function
219 to calculate matchings in graphs and bipartite graphs.
221 \image html bipartite_matching.png
222 \image latex bipartite_matching.eps "Bipartite Matching" width=\textwidth
227 @defgroup spantree Minimum Spanning Tree algorithms
229 \brief This group contains the algorithms for finding a minimum cost spanning
232 This group contains the algorithms for finding a minimum cost spanning
238 @defgroup auxalg Auxiliary algorithms
240 \brief Some algorithms implemented in LEMON.
242 This group describes the algorithms in LEMON in order to make
243 it easier to implement complex algorithms.
247 @defgroup approx Approximation algorithms
248 \brief Approximation algorithms
250 Approximation and heuristic algorithms
254 @defgroup gen_opt_group General Optimization Tools
255 \brief This group describes some general optimization frameworks
256 implemented in LEMON.
258 This group describes some general optimization frameworks
259 implemented in LEMON.
264 @defgroup lp_group Lp and Mip solvers
265 @ingroup gen_opt_group
266 \brief Lp and Mip solver interfaces for LEMON.
268 This group describes Lp and Mip solver interfaces for LEMON. The
269 various LP solvers could be used in the same manner with this
275 @defgroup lp_utils Tools for Lp and Mip solvers
277 \brief This group adds some helper tools to the Lp and Mip solvers
278 implemented in LEMON.
280 This group adds some helper tools to general optimization framework
281 implemented in LEMON.
285 @defgroup metah Metaheuristics
286 @ingroup gen_opt_group
287 \brief Metaheuristics for LEMON library.
289 This group contains some metaheuristic optimization tools.
293 @defgroup utils Tools and Utilities
294 \brief Tools and Utilities for Programming in LEMON
296 Tools and Utilities for Programming in LEMON
300 @defgroup gutils Basic Graph Utilities
302 \brief This group describes some simple basic graph utilities.
304 This group describes some simple basic graph utilities.
308 @defgroup misc Miscellaneous Tools
310 Here you can find several useful tools for development,
311 debugging and testing.
316 @defgroup timecount Time measuring and Counting
318 Here you can find simple tools for measuring the performance
323 @defgroup graphbits Tools for Graph Implementation
325 \brief Tools to Make It Easier to Make Graphs.
327 This group describes the tools that makes it easier to make graphs and
328 the maps that dynamically update with the graph changes.
332 @defgroup exceptions Exceptions
334 This group contains the exceptions thrown by LEMON library
338 @defgroup io_group Input-Output
339 \brief Several Graph Input-Output methods
341 Here you can find tools for importing and exporting graphs
342 and graph related data. Now it supports the LEMON format, the
343 \c DIMACS format and the encapsulated postscript format.
347 @defgroup lemon_io Lemon Input-Output
349 \brief Reading and writing LEMON format
351 Methods for reading and writing LEMON format. More about this
352 format you can find on the \ref graph-io-page "Graph Input-Output"
357 @defgroup section_io Section readers and writers
359 \brief Section readers and writers for lemon Input-Output.
361 Here you can find which section readers and writers can attach to
362 the LemonReader and LemonWriter.
366 @defgroup item_io Item Readers and Writers
368 \brief Item readers and writers for lemon Input-Output.
370 The Input-Output classes can handle more data type by example
371 as map or attribute value. Each of these should be written and
372 read some way. The module make possible to do this.
376 @defgroup eps_io Postscript exporting
378 \brief General \c EPS drawer and graph exporter
380 This group contains general \c EPS drawing methods and special
381 graph exporting tools.
386 @defgroup concept Concepts
387 \brief Skeleton classes and concept checking classes
389 This group describes the data/algorithm skeletons and concept checking
390 classes implemented in LEMON.
392 The purpose of the classes in this group is fourfold.
394 - These classes contain the documentations of the concepts. In order
395 to avoid document multiplications, an implementation of a concept
396 simply refers to the corresponding concept class.
398 - These classes declare every functions, <tt>typedef</tt>s etc. an
399 implementation of the concepts should provide, however completely
400 without implementations and real data structures behind the
401 interface. On the other hand they should provide nothing else. All
402 the algorithms working on a data structure meeting a certain concept
403 should compile with these classes. (Though it will not run properly,
404 of course.) In this way it is easily to check if an algorithm
405 doesn't use any extra feature of a certain implementation.
407 - The concept descriptor classes also provide a <em>checker class</em>
408 that makes it possible check whether a certain implementation of a
409 concept indeed provides all the required features.
411 - Finally, They can serve as a skeleton of a new implementation of a concept.
417 @defgroup graph_concepts Graph Structure Concepts
419 \brief Skeleton and concept checking classes for graph structures
421 This group contains the skeletons and concept checking classes of LEMON's
422 graph structures and helper classes used to implement these.
426 @defgroup experimental Experimental Structures and Algorithms
427 This group contains some Experimental structures and algorithms.
428 The stuff here is subject to change.
434 @defgroup demos Demo programs
436 Some demo programs are listed here. Their full source codes can be found in
437 the \c demo subdirectory of the source tree.
439 The standard compilation procedure (<tt>./configure;make</tt>) will compile