COIN-OR::LEMON - Graph Library

Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • doc/groups.dox

    r658 r318  
    33 * This file is a part of LEMON, a generic C++ optimization library.
    44 *
    5  * Copyright (C) 2003-2009
     5 * Copyright (C) 2003-2008
    66 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
    77 * (Egervary Research Group on Combinatorial Optimization, EGRES).
     
    1717 */
    1818
    19 namespace lemon {
    20 
    2119/**
    2220@defgroup datas Data Structures
    23 This group contains the several data structures implemented in LEMON.
     21This group describes the several data structures implemented in LEMON.
    2422*/
    2523
     
    6361
    6462/**
    65 @defgroup graph_adaptors Adaptor Classes for Graphs
    66 @ingroup graphs
    67 \brief Adaptor classes for digraphs and graphs
    68 
    69 This group contains several useful adaptor classes for digraphs and graphs.
    70 
    71 The main parts of LEMON are the different graph structures, generic
    72 graph algorithms, graph concepts, which couple them, and graph
    73 adaptors. While the previous notions are more or less clear, the
    74 latter one needs further explanation. Graph adaptors are graph classes
    75 which serve for considering graph structures in different ways.
    76 
    77 A short example makes this much clearer.  Suppose that we have an
    78 instance \c g of a directed graph type, say ListDigraph and an algorithm
    79 \code
    80 template <typename Digraph>
    81 int algorithm(const Digraph&);
    82 \endcode
    83 is needed to run on the reverse oriented graph.  It may be expensive
    84 (in time or in memory usage) to copy \c g with the reversed
    85 arcs.  In this case, an adaptor class is used, which (according
    86 to LEMON \ref concepts::Digraph "digraph concepts") works as a digraph.
    87 The adaptor uses the original digraph structure and digraph operations when
    88 methods of the reversed oriented graph are called.  This means that the adaptor
    89 have minor memory usage, and do not perform sophisticated algorithmic
    90 actions.  The purpose of it is to give a tool for the cases when a
    91 graph have to be used in a specific alteration.  If this alteration is
    92 obtained by a usual construction like filtering the node or the arc set or
    93 considering a new orientation, then an adaptor is worthwhile to use.
    94 To come back to the reverse oriented graph, in this situation
    95 \code
    96 template<typename Digraph> class ReverseDigraph;
    97 \endcode
    98 template class can be used. The code looks as follows
    99 \code
    100 ListDigraph g;
    101 ReverseDigraph<ListDigraph> rg(g);
    102 int result = algorithm(rg);
    103 \endcode
    104 During running the algorithm, the original digraph \c g is untouched.
    105 This techniques give rise to an elegant code, and based on stable
    106 graph adaptors, complex algorithms can be implemented easily.
    107 
    108 In flow, circulation and matching problems, the residual
    109 graph is of particular importance. Combining an adaptor implementing
    110 this with shortest path algorithms or minimum mean cycle algorithms,
    111 a range of weighted and cardinality optimization algorithms can be
    112 obtained. For other examples, the interested user is referred to the
    113 detailed documentation of particular adaptors.
    114 
    115 The behavior of graph adaptors can be very different. Some of them keep
    116 capabilities of the original graph while in other cases this would be
    117 meaningless. This means that the concepts that they meet depend
    118 on the graph adaptor, and the wrapped graph.
    119 For example, if an arc of a reversed digraph is deleted, this is carried
    120 out by deleting the corresponding arc of the original digraph, thus the
    121 adaptor modifies the original digraph.
    122 However in case of a residual digraph, this operation has no sense.
    123 
    124 Let us stand one more example here to simplify your work.
    125 ReverseDigraph has constructor
    126 \code
    127 ReverseDigraph(Digraph& digraph);
    128 \endcode
    129 This means that in a situation, when a <tt>const %ListDigraph&</tt>
    130 reference to a graph is given, then it have to be instantiated with
    131 <tt>Digraph=const %ListDigraph</tt>.
    132 \code
    133 int algorithm1(const ListDigraph& g) {
    134   ReverseDigraph<const ListDigraph> rg(g);
    135   return algorithm2(rg);
    136 }
    137 \endcode
    138 */
    139 
    140 /**
    14163@defgroup semi_adaptors Semi-Adaptor Classes for Graphs
    14264@ingroup graphs
    14365\brief Graph types between real graphs and graph adaptors.
    14466
    145 This group contains some graph types between real graphs and graph adaptors.
     67This group describes some graph types between real graphs and graph adaptors.
    14668These classes wrap graphs to give new functionality as the adaptors do it.
    14769On the other hand they are not light-weight structures as the adaptors.
     
    15375\brief Map structures implemented in LEMON.
    15476
    155 This group contains the map structures implemented in LEMON.
     77This group describes the map structures implemented in LEMON.
    15678
    15779LEMON provides several special purpose maps and map adaptors that e.g. combine
     
    16688\brief Special graph-related maps.
    16789
    168 This group contains maps that are specifically designed to assign
    169 values to the nodes and arcs/edges of graphs.
    170 
    171 If you are looking for the standard graph maps (\c NodeMap, \c ArcMap,
    172 \c EdgeMap), see the \ref graph_concepts "Graph Structure Concepts".
     90This group describes maps that are specifically designed to assign
     91values to the nodes and arcs of graphs.
    17392*/
    17493
     
    17897\brief Tools to create new maps from existing ones
    17998
    180 This group contains map adaptors that are used to create "implicit"
     99This group describes map adaptors that are used to create "implicit"
    181100maps from other maps.
    182101
    183 Most of them are \ref concepts::ReadMap "read-only maps".
     102Most of them are \ref lemon::concepts::ReadMap "read-only maps".
    184103They can make arithmetic and logical operations between one or two maps
    185104(negation, shifting, addition, multiplication, logical 'and', 'or',
     
    241160\brief Two dimensional data storages implemented in LEMON.
    242161
    243 This group contains two dimensional data storages implemented in LEMON.
     162This group describes two dimensional data storages implemented in LEMON.
    244163*/
    245164
     
    249168\brief %Path structures implemented in LEMON.
    250169
    251 This group contains the path structures implemented in LEMON.
     170This group describes the path structures implemented in LEMON.
    252171
    253172LEMON provides flexible data structures to work with paths.
     
    265184\brief Auxiliary data structures implemented in LEMON.
    266185
    267 This group contains some data structures implemented in LEMON in
     186This group describes some data structures implemented in LEMON in
    268187order to make it easier to implement combinatorial algorithms.
    269188*/
     
    271190/**
    272191@defgroup algs Algorithms
    273 \brief This group contains the several algorithms
     192\brief This group describes the several algorithms
    274193implemented in LEMON.
    275194
    276 This group contains the several algorithms
     195This group describes the several algorithms
    277196implemented in LEMON.
    278197*/
     
    283202\brief Common graph search algorithms.
    284203
    285 This group contains the common graph search algorithms, namely
    286 \e breadth-first \e search (BFS) and \e depth-first \e search (DFS).
     204This group describes the common graph search algorithms like
     205Breadth-First Search (BFS) and Depth-First Search (DFS).
    287206*/
    288207
     
    292211\brief Algorithms for finding shortest paths.
    293212
    294 This group contains the algorithms for finding shortest paths in digraphs.
    295 
    296  - \ref Dijkstra algorithm for finding shortest paths from a source node
    297    when all arc lengths are non-negative.
    298  - \ref BellmanFord "Bellman-Ford" algorithm for finding shortest paths
    299    from a source node when arc lenghts can be either positive or negative,
    300    but the digraph should not contain directed cycles with negative total
    301    length.
    302  - \ref FloydWarshall "Floyd-Warshall" and \ref Johnson "Johnson" algorithms
    303    for solving the \e all-pairs \e shortest \e paths \e problem when arc
    304    lenghts can be either positive or negative, but the digraph should
    305    not contain directed cycles with negative total length.
    306  - \ref Suurballe A successive shortest path algorithm for finding
    307    arc-disjoint paths between two nodes having minimum total length.
     213This group describes the algorithms for finding shortest paths in graphs.
    308214*/
    309215
     
    313219\brief Algorithms for finding maximum flows.
    314220
    315 This group contains the algorithms for finding maximum flows and
     221This group describes the algorithms for finding maximum flows and
    316222feasible circulations.
    317223
    318 The \e maximum \e flow \e problem is to find a flow of maximum value between
    319 a single source and a single target. Formally, there is a \f$G=(V,A)\f$
    320 digraph, a \f$cap: A\rightarrow\mathbf{R}^+_0\f$ capacity function and
    321 \f$s, t \in V\f$ source and target nodes.
    322 A maximum flow is an \f$f: A\rightarrow\mathbf{R}^+_0\f$ solution of the
    323 following optimization problem.
    324 
    325 \f[ \max\sum_{sv\in A} f(sv) - \sum_{vs\in A} f(vs) \f]
    326 \f[ \sum_{uv\in A} f(uv) = \sum_{vu\in A} f(vu)
    327     \quad \forall u\in V\setminus\{s,t\} \f]
    328 \f[ 0 \leq f(uv) \leq cap(uv) \quad \forall uv\in A \f]
     224The maximum flow problem is to find a flow between a single source and
     225a single target that is maximum. Formally, there is a \f$G=(V,A)\f$
     226directed graph, an \f$c_a:A\rightarrow\mathbf{R}^+_0\f$ capacity
     227function and given \f$s, t \in V\f$ source and target node. The
     228maximum flow is the \f$f_a\f$ solution of the next optimization problem:
     229
     230\f[ 0 \le f_a \le c_a \f]
     231\f[ \sum_{v\in\delta^{-}(u)}f_{vu}=\sum_{v\in\delta^{+}(u)}f_{uv}
     232\qquad \forall u \in V \setminus \{s,t\}\f]
     233\f[ \max \sum_{v\in\delta^{+}(s)}f_{uv} - \sum_{v\in\delta^{-}(s)}f_{vu}\f]
    329234
    330235LEMON contains several algorithms for solving maximum flow problems:
    331 - \ref EdmondsKarp Edmonds-Karp algorithm.
    332 - \ref Preflow Goldberg-Tarjan's preflow push-relabel algorithm.
    333 - \ref DinitzSleatorTarjan Dinitz's blocking flow algorithm with dynamic trees.
    334 - \ref GoldbergTarjan Preflow push-relabel algorithm with dynamic trees.
    335 
    336 In most cases the \ref Preflow "Preflow" algorithm provides the
    337 fastest method for computing a maximum flow. All implementations
    338 provides functions to also query the minimum cut, which is the dual
    339 problem of the maximum flow.
     236- \ref lemon::EdmondsKarp "Edmonds-Karp"
     237- \ref lemon::Preflow "Goldberg's Preflow algorithm"
     238- \ref lemon::DinitzSleatorTarjan "Dinitz's blocking flow algorithm with dynamic trees"
     239- \ref lemon::GoldbergTarjan "Preflow algorithm with dynamic trees"
     240
     241In most cases the \ref lemon::Preflow "Preflow" algorithm provides the
     242fastest method to compute the maximum flow. All impelementations
     243provides functions to query the minimum cut, which is the dual linear
     244programming problem of the maximum flow.
    340245*/
    341246
     
    346251\brief Algorithms for finding minimum cost flows and circulations.
    347252
    348 This group contains the algorithms for finding minimum cost flows and
     253This group describes the algorithms for finding minimum cost flows and
    349254circulations.
    350 
    351 The \e minimum \e cost \e flow \e problem is to find a feasible flow of
    352 minimum total cost from a set of supply nodes to a set of demand nodes
    353 in a network with capacity constraints (lower and upper bounds)
    354 and arc costs.
    355 Formally, let \f$G=(V,A)\f$ be a digraph,
    356 \f$lower, upper: A\rightarrow\mathbf{Z}^+_0\f$ denote the lower and
    357 upper bounds for the flow values on the arcs, for which
    358 \f$0 \leq lower(uv) \leq upper(uv)\f$ holds for all \f$uv\in A\f$.
    359 \f$cost: A\rightarrow\mathbf{Z}^+_0\f$ denotes the cost per unit flow
    360 on the arcs, and \f$sup: V\rightarrow\mathbf{Z}\f$ denotes the
    361 signed supply values of the nodes.
    362 If \f$sup(u)>0\f$, then \f$u\f$ is a supply node with \f$sup(u)\f$
    363 supply, if \f$sup(u)<0\f$, then \f$u\f$ is a demand node with
    364 \f$-sup(u)\f$ demand.
    365 A minimum cost flow is an \f$f: A\rightarrow\mathbf{Z}^+_0\f$ solution
    366 of the following optimization problem.
    367 
    368 \f[ \min\sum_{uv\in A} f(uv) \cdot cost(uv) \f]
    369 \f[ \sum_{uv\in A} f(uv) - \sum_{vu\in A} f(vu) \geq
    370     sup(u) \quad \forall u\in V \f]
    371 \f[ lower(uv) \leq f(uv) \leq upper(uv) \quad \forall uv\in A \f]
    372 
    373 The sum of the supply values, i.e. \f$\sum_{u\in V} sup(u)\f$ must be
    374 zero or negative in order to have a feasible solution (since the sum
    375 of the expressions on the left-hand side of the inequalities is zero).
    376 It means that the total demand must be greater or equal to the total
    377 supply and all the supplies have to be carried out from the supply nodes,
    378 but there could be demands that are not satisfied.
    379 If \f$\sum_{u\in V} sup(u)\f$ is zero, then all the supply/demand
    380 constraints have to be satisfied with equality, i.e. all demands
    381 have to be satisfied and all supplies have to be used.
    382 
    383 If you need the opposite inequalities in the supply/demand constraints
    384 (i.e. the total demand is less than the total supply and all the demands
    385 have to be satisfied while there could be supplies that are not used),
    386 then you could easily transform the problem to the above form by reversing
    387 the direction of the arcs and taking the negative of the supply values
    388 (e.g. using \ref ReverseDigraph and \ref NegMap adaptors).
    389 However \ref NetworkSimplex algorithm also supports this form directly
    390 for the sake of convenience.
    391 
    392 A feasible solution for this problem can be found using \ref Circulation.
    393 
    394 Note that the above formulation is actually more general than the usual
    395 definition of the minimum cost flow problem, in which strict equalities
    396 are required in the supply/demand contraints, i.e.
    397 
    398 \f[ \sum_{uv\in A} f(uv) - \sum_{vu\in A} f(vu) =
    399     sup(u) \quad \forall u\in V. \f]
    400 
    401 However if the sum of the supply values is zero, then these two problems
    402 are equivalent. So if you need the equality form, you have to ensure this
    403 additional contraint for the algorithms.
    404 
    405 The dual solution of the minimum cost flow problem is represented by node
    406 potentials \f$\pi: V\rightarrow\mathbf{Z}\f$.
    407 An \f$f: A\rightarrow\mathbf{Z}^+_0\f$ feasible solution of the problem
    408 is optimal if and only if for some \f$\pi: V\rightarrow\mathbf{Z}\f$
    409 node potentials the following \e complementary \e slackness optimality
    410 conditions hold.
    411 
    412  - For all \f$uv\in A\f$ arcs:
    413    - if \f$cost^\pi(uv)>0\f$, then \f$f(uv)=lower(uv)\f$;
    414    - if \f$lower(uv)<f(uv)<upper(uv)\f$, then \f$cost^\pi(uv)=0\f$;
    415    - if \f$cost^\pi(uv)<0\f$, then \f$f(uv)=upper(uv)\f$.
    416  - For all \f$u\in V\f$:
    417    - if \f$\sum_{uv\in A} f(uv) - \sum_{vu\in A} f(vu) \neq sup(u)\f$,
    418      then \f$\pi(u)=0\f$.
    419  
    420 Here \f$cost^\pi(uv)\f$ denotes the \e reduced \e cost of the arc
    421 \f$uv\in A\f$ with respect to the node potentials \f$\pi\f$, i.e.
    422 \f[ cost^\pi(uv) = cost(uv) + \pi(u) - \pi(v).\f]
    423 
    424 All algorithms provide dual solution (node potentials) as well
    425 if an optimal flow is found.
    426 
    427 LEMON contains several algorithms for solving minimum cost flow problems.
    428  - \ref NetworkSimplex Primal Network Simplex algorithm with various
    429    pivot strategies.
    430  - \ref CostScaling Push-Relabel and Augment-Relabel algorithms based on
    431    cost scaling.
    432  - \ref CapacityScaling Successive Shortest %Path algorithm with optional
    433    capacity scaling.
    434  - \ref CancelAndTighten The Cancel and Tighten algorithm.
    435  - \ref CycleCanceling Cycle-Canceling algorithms.
    436 
    437 Most of these implementations support the general inequality form of the
    438 minimum cost flow problem, but CancelAndTighten and CycleCanceling
    439 only support the equality form due to the primal method they use.
    440 
    441 In general NetworkSimplex is the most efficient implementation,
    442 but in special cases other algorithms could be faster.
    443 For example, if the total supply and/or capacities are rather small,
    444 CapacityScaling is usually the fastest algorithm (without effective scaling).
    445255*/
    446256
     
    451261\brief Algorithms for finding minimum cut in graphs.
    452262
    453 This group contains the algorithms for finding minimum cut in graphs.
    454 
    455 The \e minimum \e cut \e problem is to find a non-empty and non-complete
    456 \f$X\f$ subset of the nodes with minimum overall capacity on
    457 outgoing arcs. Formally, there is a \f$G=(V,A)\f$ digraph, a
    458 \f$cap: A\rightarrow\mathbf{R}^+_0\f$ capacity function. The minimum
     263This group describes the algorithms for finding minimum cut in graphs.
     264
     265The minimum cut problem is to find a non-empty and non-complete
     266\f$X\f$ subset of the vertices with minimum overall capacity on
     267outgoing arcs. Formally, there is \f$G=(V,A)\f$ directed graph, an
     268\f$c_a:A\rightarrow\mathbf{R}^+_0\f$ capacity function. The minimum
    459269cut is the \f$X\f$ solution of the next optimization problem:
    460270
    461271\f[ \min_{X \subset V, X\not\in \{\emptyset, V\}}
    462     \sum_{uv\in A, u\in X, v\not\in X}cap(uv) \f]
     272\sum_{uv\in A, u\in X, v\not\in X}c_{uv}\f]
    463273
    464274LEMON contains several algorithms related to minimum cut problems:
    465275
    466 - \ref HaoOrlin "Hao-Orlin algorithm" for calculating minimum cut
    467   in directed graphs.
    468 - \ref NagamochiIbaraki "Nagamochi-Ibaraki algorithm" for
    469   calculating minimum cut in undirected graphs.
    470 - \ref GomoryHu "Gomory-Hu tree computation" for calculating
    471   all-pairs minimum cut in undirected graphs.
     276- \ref lemon::HaoOrlin "Hao-Orlin algorithm" to calculate minimum cut
     277  in directed graphs
     278- \ref lemon::NagamochiIbaraki "Nagamochi-Ibaraki algorithm" to
     279  calculate minimum cut in undirected graphs
     280- \ref lemon::GomoryHuTree "Gomory-Hu tree computation" to calculate all
     281  pairs minimum cut in undirected graphs
    472282
    473283If you want to find minimum cut just between two distinict nodes,
    474 see the \ref max_flow "maximum flow problem".
    475 */
    476 
    477 /**
    478 @defgroup graph_properties Connectivity and Other Graph Properties
     284please see the \ref max_flow "Maximum Flow page".
     285*/
     286
     287/**
     288@defgroup graph_prop Connectivity and Other Graph Properties
    479289@ingroup algs
    480290\brief Algorithms for discovering the graph properties
    481291
    482 This group contains the algorithms for discovering the graph properties
     292This group describes the algorithms for discovering the graph properties
    483293like connectivity, bipartiteness, euler property, simplicity etc.
    484294
     
    492302\brief Algorithms for planarity checking, embedding and drawing
    493303
    494 This group contains the algorithms for planarity checking,
     304This group describes the algorithms for planarity checking,
    495305embedding and drawing.
    496306
     
    504314\brief Algorithms for finding matchings in graphs and bipartite graphs.
    505315
    506 This group contains the algorithms for calculating
     316This group contains algorithm objects and functions to calculate
    507317matchings in graphs and bipartite graphs. The general matching problem is
    508 finding a subset of the edges for which each node has at most one incident
    509 edge.
     318finding a subset of the arcs which does not shares common endpoints.
    510319
    511320There are several different algorithms for calculate matchings in
    512321graphs.  The matching problems in bipartite graphs are generally
    513322easier than in general graphs. The goal of the matching optimization
    514 can be finding maximum cardinality, maximum weight or minimum cost
     323can be the finding maximum cardinality, maximum weight or minimum cost
    515324matching. The search can be constrained to find perfect or
    516325maximum cardinality matching.
    517326
    518 The matching algorithms implemented in LEMON:
    519 - \ref MaxBipartiteMatching Hopcroft-Karp augmenting path algorithm
    520   for calculating maximum cardinality matching in bipartite graphs.
    521 - \ref PrBipartiteMatching Push-relabel algorithm
    522   for calculating maximum cardinality matching in bipartite graphs.
    523 - \ref MaxWeightedBipartiteMatching
    524   Successive shortest path algorithm for calculating maximum weighted
    525   matching and maximum weighted bipartite matching in bipartite graphs.
    526 - \ref MinCostMaxBipartiteMatching
    527   Successive shortest path algorithm for calculating minimum cost maximum
    528   matching in bipartite graphs.
    529 - \ref MaxMatching Edmond's blossom shrinking algorithm for calculating
    530   maximum cardinality matching in general graphs.
    531 - \ref MaxWeightedMatching Edmond's blossom shrinking algorithm for calculating
    532   maximum weighted matching in general graphs.
    533 - \ref MaxWeightedPerfectMatching
    534   Edmond's blossom shrinking algorithm for calculating maximum weighted
    535   perfect matching in general graphs.
     327LEMON contains the next algorithms:
     328- \ref lemon::MaxBipartiteMatching "MaxBipartiteMatching" Hopcroft-Karp
     329  augmenting path algorithm for calculate maximum cardinality matching in
     330  bipartite graphs
     331- \ref lemon::PrBipartiteMatching "PrBipartiteMatching" Push-Relabel
     332  algorithm for calculate maximum cardinality matching in bipartite graphs
     333- \ref lemon::MaxWeightedBipartiteMatching "MaxWeightedBipartiteMatching"
     334  Successive shortest path algorithm for calculate maximum weighted matching
     335  and maximum weighted bipartite matching in bipartite graph
     336- \ref lemon::MinCostMaxBipartiteMatching "MinCostMaxBipartiteMatching"
     337  Successive shortest path algorithm for calculate minimum cost maximum
     338  matching in bipartite graph
     339- \ref lemon::MaxMatching "MaxMatching" Edmond's blossom shrinking algorithm
     340  for calculate maximum cardinality matching in general graph
     341- \ref lemon::MaxWeightedMatching "MaxWeightedMatching" Edmond's blossom
     342  shrinking algorithm for calculate maximum weighted matching in general
     343  graph
     344- \ref lemon::MaxWeightedPerfectMatching "MaxWeightedPerfectMatching"
     345  Edmond's blossom shrinking algorithm for calculate maximum weighted
     346  perfect matching in general graph
    536347
    537348\image html bipartite_matching.png
     
    544355\brief Algorithms for finding a minimum cost spanning tree in a graph.
    545356
    546 This group contains the algorithms for finding a minimum cost spanning
    547 tree in a graph.
     357This group describes the algorithms for finding a minimum cost spanning
     358tree in a graph
    548359*/
    549360
     
    553364\brief Auxiliary algorithms implemented in LEMON.
    554365
    555 This group contains some algorithms implemented in LEMON
     366This group describes some algorithms implemented in LEMON
    556367in order to make it easier to implement complex algorithms.
    557368*/
     
    562373\brief Approximation algorithms.
    563374
    564 This group contains the approximation and heuristic algorithms
     375This group describes the approximation and heuristic algorithms
    565376implemented in LEMON.
    566377*/
     
    568379/**
    569380@defgroup gen_opt_group General Optimization Tools
    570 \brief This group contains some general optimization frameworks
     381\brief This group describes some general optimization frameworks
    571382implemented in LEMON.
    572383
    573 This group contains some general optimization frameworks
     384This group describes some general optimization frameworks
    574385implemented in LEMON.
    575386*/
     
    580391\brief Lp and Mip solver interfaces for LEMON.
    581392
    582 This group contains Lp and Mip solver interfaces for LEMON. The
     393This group describes Lp and Mip solver interfaces for LEMON. The
    583394various LP solvers could be used in the same manner with this
    584395interface.
     
    599410\brief Metaheuristics for LEMON library.
    600411
    601 This group contains some metaheuristic optimization tools.
     412This group describes some metaheuristic optimization tools.
    602413*/
    603414
     
    614425\brief Simple basic graph utilities.
    615426
    616 This group contains some simple basic graph utilities.
     427This group describes some simple basic graph utilities.
    617428*/
    618429
     
    622433\brief Tools for development, debugging and testing.
    623434
    624 This group contains several useful tools for development,
     435This group describes several useful tools for development,
    625436debugging and testing.
    626437*/
     
    631442\brief Simple tools for measuring the performance of algorithms.
    632443
    633 This group contains simple tools for measuring the performance
     444This group describes simple tools for measuring the performance
    634445of algorithms.
    635446*/
     
    640451\brief Exceptions defined in LEMON.
    641452
    642 This group contains the exceptions defined in LEMON.
     453This group describes the exceptions defined in LEMON.
    643454*/
    644455
     
    647458\brief Graph Input-Output methods
    648459
    649 This group contains the tools for importing and exporting graphs
     460This group describes the tools for importing and exporting graphs
    650461and graph related data. Now it supports the \ref lgf-format
    651462"LEMON Graph Format", the \c DIMACS format and the encapsulated
     
    654465
    655466/**
    656 @defgroup lemon_io LEMON Graph Format
     467@defgroup lemon_io LEMON Input-Output
    657468@ingroup io_group
    658469\brief Reading and writing LEMON Graph Format.
    659470
    660 This group contains methods for reading and writing
     471This group describes methods for reading and writing
    661472\ref lgf-format "LEMON Graph Format".
    662473*/
     
    667478\brief General \c EPS drawer and graph exporter
    668479
    669 This group contains general \c EPS drawing methods and special
     480This group describes general \c EPS drawing methods and special
    670481graph exporting tools.
    671 */
    672 
    673 /**
    674 @defgroup dimacs_group DIMACS format
    675 @ingroup io_group
    676 \brief Read and write files in DIMACS format
    677 
    678 Tools to read a digraph from or write it to a file in DIMACS format data.
    679 */
    680 
    681 /**
    682 @defgroup nauty_group NAUTY Format
    683 @ingroup io_group
    684 \brief Read \e Nauty format
    685 
    686 Tool to read graphs from \e Nauty format data.
    687482*/
    688483
     
    691486\brief Skeleton classes and concept checking classes
    692487
    693 This group contains the data/algorithm skeletons and concept checking
     488This group describes the data/algorithm skeletons and concept checking
    694489classes implemented in LEMON.
    695490
     
    721516\brief Skeleton and concept checking classes for graph structures
    722517
    723 This group contains the skeletons and concept checking classes of LEMON's
     518This group describes the skeletons and concept checking classes of LEMON's
    724519graph structures and helper classes used to implement these.
    725520*/
     
    730525\brief Skeleton and concept checking classes for maps
    731526
    732 This group contains the skeletons and concept checking classes of maps.
     527This group describes the skeletons and concept checking classes of maps.
    733528*/
    734529
     
    736531\anchor demoprograms
    737532
    738 @defgroup demos Demo Programs
     533@defgroup demos Demo programs
    739534
    740535Some demo programs are listed here. Their full source codes can be found in
    741536the \c demo subdirectory of the source tree.
    742537
    743 In order to compile them, use the <tt>make demo</tt> or the
    744 <tt>make check</tt> commands.
    745 */
    746 
    747 /**
    748 @defgroup tools Standalone Utility Applications
     538It order to compile them, use <tt>--enable-demo</tt> configure option when
     539build the library.
     540*/
     541
     542/**
     543@defgroup tools Standalone utility applications
    749544
    750545Some utility applications are listed here.
     
    754549*/
    755550
    756 }
Note: See TracChangeset for help on using the changeset viewer.