Changes in / [1041:f112c18bc304:1043:4e36fdf856b7] in lemon
- Files:
-
- 3 added
- 1 deleted
- 24 edited
Legend:
- Unmodified
- Added
- Removed
-
CMakeLists.txt
r791 r1035 3 3 SET(PROJECT_NAME "LEMON") 4 4 PROJECT(${PROJECT_NAME}) 5 6 INCLUDE(FindPythonInterp) 7 INCLUDE(FindWget) 5 8 6 9 IF(EXISTS ${PROJECT_SOURCE_DIR}/cmake/version.cmake) … … 10 13 ELSE() 11 14 EXECUTE_PROCESS( 15 COMMAND ${PYTHON_EXECUTABLE} ./scripts/chg-len.py 16 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} 17 OUTPUT_VARIABLE HG_REVISION_PATH 18 ERROR_QUIET 19 OUTPUT_STRIP_TRAILING_WHITESPACE 20 ) 21 EXECUTE_PROCESS( 12 22 COMMAND hg id -i 13 23 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} … … 17 27 ) 18 28 IF(HG_REVISION STREQUAL "") 19 SET(HG_REVISION "hg-tip") 29 SET(HG_REVISION_ID "hg-tip") 30 ELSE() 31 IF(HG_REVISION_PATH STREQUAL "") 32 SET(HG_REVISION_ID ${HG_REVISION}) 33 ELSE() 34 SET(HG_REVISION_ID ${HG_REVISION_PATH}.${HG_REVISION}) 35 ENDIF() 20 36 ENDIF() 21 SET(LEMON_VERSION ${HG_REVISION } CACHE STRING "LEMON version string.")37 SET(LEMON_VERSION ${HG_REVISION_ID} CACHE STRING "LEMON version string.") 22 38 ENDIF() 23 39 … … 32 48 FIND_PACKAGE(COIN) 33 49 50 IF(DEFINED ENV{LEMON_CXX_WARNING}) 51 SET(CXX_WARNING $ENV{LEMON_CXX_WARNING}) 52 ELSE() 53 IF(CMAKE_COMPILER_IS_GNUCXX) 54 SET(CXX_WARNING "-Wall -W -Wunused -Wformat=2 -Wctor-dtor-privacy -Wnon-virtual-dtor -Wno-char-subscripts -Wwrite-strings -Wno-char-subscripts -Wreturn-type -Wcast-qual -Wcast-align -Wsign-promo -Woverloaded-virtual -ansi -fno-strict-aliasing -Wold-style-cast -Wno-unknown-pragmas") 55 SET(CMAKE_CXX_FLAGS_DEBUG CACHE STRING "-ggdb") 56 SET(CMAKE_C_FLAGS_DEBUG CACHE STRING "-ggdb") 57 ELSEIF(MSVC) 58 # This part is unnecessary 'casue the same is set by the lemon/core.h. 59 # Still keep it as an example. 60 SET(CXX_WARNING "/wd4250 /wd4355 /wd4503 /wd4800 /wd4996") 61 # Suppressed warnings: 62 # C4250: 'class1' : inherits 'class2::member' via dominance 63 # C4355: 'this' : used in base member initializer list 64 # C4503: 'function' : decorated name length exceeded, name was truncated 65 # C4800: 'type' : forcing value to bool 'true' or 'false' 66 # (performance warning) 67 # C4996: 'function': was declared deprecated 68 ELSE() 69 SET(CXX_WARNING "-Wall -W") 70 ENDIF() 71 ENDIF() 72 SET(LEMON_CXX_WARNING_FLAGS ${CXX_WARNING} CACHE STRING "LEMON warning flags.") 73 74 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${LEMON_CXX_WARNING_FLAGS}") 75 76 SET( CMAKE_CXX_FLAGS_MAINTAINER "-Werror -ggdb" CACHE STRING 77 "Flags used by the C++ compiler during maintainer builds." 78 FORCE ) 79 SET( CMAKE_C_FLAGS_MAINTAINER "-Werror" CACHE STRING 80 "Flags used by the C compiler during maintainer builds." 81 FORCE ) 82 SET( CMAKE_EXE_LINKER_FLAGS_MAINTAINER 83 "-Wl,--warn-unresolved-symbols,--warn-once" CACHE STRING 84 "Flags used for linking binaries during maintainer builds." 85 FORCE ) 86 SET( CMAKE_SHARED_LINKER_FLAGS_MAINTAINER 87 "-Wl,--warn-unresolved-symbols,--warn-once" CACHE STRING 88 "Flags used by the shared libraries linker during maintainer builds." 89 FORCE ) 90 MARK_AS_ADVANCED( 91 CMAKE_CXX_FLAGS_MAINTAINER 92 CMAKE_C_FLAGS_MAINTAINER 93 CMAKE_EXE_LINKER_FLAGS_MAINTAINER 94 CMAKE_SHARED_LINKER_FLAGS_MAINTAINER ) 95 96 IF(CMAKE_CONFIGURATION_TYPES) 97 LIST(APPEND CMAKE_CONFIGURATION_TYPES Maintainer) 98 LIST(REMOVE_DUPLICATES CMAKE_CONFIGURATION_TYPES) 99 SET(CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES}" CACHE STRING 100 "Add the configurations that we need" 101 FORCE) 102 endif() 103 104 IF(NOT CMAKE_BUILD_TYPE) 105 SET(CMAKE_BUILD_TYPE "Release") 106 ENDIF() 107 108 SET( CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING 109 "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel Maintainer." 110 FORCE ) 111 112 34 113 INCLUDE(CheckTypeSize) 35 114 CHECK_TYPE_SIZE("long long" LONG_LONG) … … 39 118 40 119 ENABLE_TESTING() 120 121 IF(${CMAKE_BUILD_TYPE} STREQUAL "Maintainer") 122 ADD_CUSTOM_TARGET(check ALL COMMAND ${CMAKE_CTEST_COMMAND}) 123 ELSE() 124 ADD_CUSTOM_TARGET(check COMMAND ${CMAKE_CTEST_COMMAND}) 125 ENDIF() 41 126 42 127 ADD_SUBDIRECTORY(lemon) … … 65 150 ENDIF() 66 151 67 IF(${CMAKE_SOURCE_DIR} STREQUAL ${PROJECT_SOURCE_DIR} AND WIN32)152 IF(${CMAKE_SOURCE_DIR} STREQUAL ${PROJECT_SOURCE_DIR}) 68 153 SET(CPACK_PACKAGE_NAME ${PROJECT_NAME}) 69 154 SET(CPACK_PACKAGE_VENDOR "EGRES") -
LICENSE
r600 r959 2 2 copyright/license. 3 3 4 Copyright (C) 2003-20 09Egervary Jeno Kombinatorikus Optimalizalasi4 Copyright (C) 2003-2010 Egervary Jeno Kombinatorikus Optimalizalasi 5 5 Kutatocsoport (Egervary Combinatorial Optimization Research Group, 6 6 EGRES). -
NEWS
r712 r1005 1 2010-10-21 Version 1.2.1 released 2 3 Bugfix release. 4 5 #366: Fix Pred[Matrix]MapPath::empty() 6 #371: Bug fix in (di)graphCopy() 7 The target graph is cleared before adding nodes and arcs/edges. 8 9 #364: Add missing UndirectedTags 10 #368: Fix the usage of std::numeric_limits<>::min() in Network Simplex 11 #372: Fix a critical bug in preflow 12 13 2010-03-19 Version 1.2 released 14 15 This is major feature release 16 17 * New algorithms 18 * Bellman-Ford algorithm (#51) 19 * Minimum mean cycle algorithms (#179) 20 * Karp, Hartman-Orlin and Howard algorithms 21 * New minimum cost flow algorithms (#180) 22 * Cost Scaling algorithms 23 * Capacity Scaling algorithm 24 * Cycle-Canceling algorithms 25 * Planarity related algorithms (#62) 26 * Planarity checking algorithm 27 * Planar embedding algorithm 28 * Schnyder's planar drawing algorithm 29 * Coloring planar graphs with five or six colors 30 * Fractional matching algorithms (#314) 31 * New data structures 32 * StaticDigraph structure (#68) 33 * Several new priority queue structures (#50, #301) 34 * Fibonacci, Radix, Bucket, Pairing, Binomial 35 D-ary and fourary heaps (#301) 36 * Iterable map structures (#73) 37 * Other new tools and functionality 38 * Map utility functions (#320) 39 * Reserve functions are added to ListGraph and SmartGraph (#311) 40 * A resize() function is added to HypercubeGraph (#311) 41 * A count() function is added to CrossRefMap (#302) 42 * Support for multiple targets in Suurballe using fullInit() (#181) 43 * Traits class and named parameters for Suurballe (#323) 44 * Separate reset() and resetParams() functions in NetworkSimplex 45 to handle graph changes (#327) 46 * tolerance() functions are added to HaoOrlin (#306) 47 * Implementation improvements 48 * Improvements in weighted matching algorithms (#314) 49 * Jumpstart initialization 50 * ArcIt iteration is based on out-arc lists instead of in-arc lists 51 in ListDigraph (#311) 52 * Faster add row operation in CbcMip (#203) 53 * Better implementation for split() in ListDigraph (#311) 54 * ArgParser can also throw exception instead of exit(1) (#332) 55 * Miscellaneous 56 * A simple interactive bootstrap script 57 * Doc improvements (#62,#180,#299,#302,#303,#304,#307,#311,#331,#315, 58 #316,#319) 59 * BibTeX references in the doc (#184) 60 * Optionally use valgrind when running tests 61 * Also check ReferenceMapTag in concept checks (#312) 62 * dimacs-solver uses long long type by default. 63 * Several bugfixes (compared to release 1.1): 64 #295: Suppress MSVC warnings using pragmas 65 ----: Various CMAKE related improvements 66 * Remove duplications from doc/CMakeLists.txt 67 * Rename documentation install folder from 'docs' to 'html' 68 * Add tools/CMakeLists.txt to the tarball 69 * Generate and install LEMONConfig.cmake 70 * Change the label of the html project in Visual Studio 71 * Fix the check for the 'long long' type 72 * Put the version string into config.h 73 * Minor CMake improvements 74 * Set the version to 'hg-tip' if everything fails 75 #311: Add missing 'explicit' keywords 76 #302: Fix the implementation and doc of CrossRefMap 77 #308: Remove duplicate list_graph.h entry from source list 78 #307: Bugfix in Preflow and Circulation 79 #305: Bugfix and extension in the rename script 80 #312: Also check ReferenceMapTag in concept checks 81 #250: Bugfix in pathSource() and pathTarget() 82 #321: Use pathCopy(from,to) instead of copyPath(to,from) 83 #322: Distribure LEMONConfig.cmake.in 84 #330: Bug fix in map_extender.h 85 #336: Fix the date field comment of graphToEps() output 86 #323: Bug fix in Suurballe 87 #335: Fix clear() function in ExtendFindEnum 88 #337: Use void* as the LPX object pointer 89 #317: Fix (and improve) error message in mip_test.cc 90 Remove unnecessary OsiCbc dependency 91 #356: Allow multiple executions of weighted matching algorithms (#356) 92 1 93 2009-05-13 Version 1.1 released 2 94 … … 73 165 ----: Add missing unistd.h include to time_measure.h 74 166 #204: Compilation bug fixed in graph_to_eps.h with VS2005 75 #214,#215: windows.h should never be included by lemonheaders167 #214,#215: windows.h should never be included by LEMON headers 76 168 #230: Build systems check the availability of 'long long' type 77 169 #229: Default implementation of Tolerance<> is used for integer types … … 95 187 2008-10-13 Version 1.0 released 96 188 97 98 99 100 101 102 189 This is the first stable release of LEMON. Compared to the 0.x 190 release series, it features a considerably smaller but more 191 matured set of tools. The API has also completely revised and 192 changed in several places. 193 194 * The major name changes compared to the 0.x series (see the 103 195 Migration Guide in the doc for more details) 104 196 * Graph -> Digraph, UGraph -> Graph 105 197 * Edge -> Arc, UEdge -> Edge 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 198 * source(UEdge)/target(UEdge) -> u(Edge)/v(Edge) 199 * Other improvements 200 * Better documentation 201 * Reviewed and cleaned up codebase 202 * CMake based build system (along with the autotools based one) 203 * Contents of the library (ported from 0.x) 204 * Algorithms 205 * breadth-first search (bfs.h) 206 * depth-first search (dfs.h) 207 * Dijkstra's algorithm (dijkstra.h) 208 * Kruskal's algorithm (kruskal.h) 209 * Data structures 210 * graph data structures (list_graph.h, smart_graph.h) 211 * path data structures (path.h) 212 * binary heap data structure (bin_heap.h) 213 * union-find data structures (unionfind.h) 214 * miscellaneous property maps (maps.h) 215 * two dimensional vector and bounding box (dim2.h) 124 216 * Concepts 125 217 * graph structure concepts (concepts/digraph.h, concepts/graph.h, 126 218 concepts/graph_components.h) 127 128 129 130 131 132 133 134 135 219 * concepts for other structures (concepts/heap.h, concepts/maps.h, 220 concepts/path.h) 221 * Tools 222 * Mersenne twister random number generator (random.h) 223 * tools for measuring cpu and wall clock time (time_measure.h) 224 * tools for counting steps and events (counter.h) 225 * tool for parsing command line arguments (arg_parser.h) 226 * tool for visualizing graphs (graph_to_eps.h) 227 * tools for reading and writing data in LEMON Graph Format 136 228 (lgf_reader.h, lgf_writer.h) 137 229 * tools to handle the anomalies of calculations with 138 230 floating point numbers (tolerance.h) 139 231 * tools to manage RGB colors (color.h) 140 141 142 143 144 232 * Infrastructure 233 * extended assertion handling (assert.h) 234 * exception classes and error handling (error.h) 235 * concept checking (concept_check.h) 236 * commonly used mathematical constants (math.h) -
configure.ac
r840 r1039 115 115 dnl Add dependencies on files generated by configure. 116 116 AC_SUBST([CONFIG_STATUS_DEPENDENCIES], 117 ['$(top_srcdir)/doc/Doxyfile.in $(top_srcdir)/ lemon/lemon.pc.in $(top_srcdir)/cmake/version.cmake.in'])117 ['$(top_srcdir)/doc/Doxyfile.in $(top_srcdir)/doc/mainpage.dox.in $(top_srcdir)/lemon/lemon.pc.in $(top_srcdir)/cmake/version.cmake.in']) 118 118 119 119 AC_CONFIG_FILES([ … … 122 122 cmake/version.cmake 123 123 doc/Doxyfile 124 doc/mainpage.dox 124 125 lemon/lemon.pc 125 126 ]) -
doc/CMakeLists.txt
r943 r1039 4 4 SET(abs_top_builddir ${PROJECT_BINARY_DIR}) 5 5 6 SET(LEMON_DOC_SOURCE_BROWSER "NO" CACHE STRING "Include source into the doc (YES/NO).") 7 6 8 CONFIGURE_FILE( 7 9 ${PROJECT_SOURCE_DIR}/doc/Doxyfile.in 8 10 ${PROJECT_BINARY_DIR}/doc/Doxyfile 11 @ONLY 12 ) 13 14 CONFIGURE_FILE( 15 ${PROJECT_SOURCE_DIR}/doc/mainpage.dox.in 16 ${PROJECT_BINARY_DIR}/doc/mainpage.dox 9 17 @ONLY 10 18 ) … … 53 61 54 62 ENDIF() 63 64 IF(WGET_FOUND) 65 ADD_CUSTOM_TARGET(update-external-tags 66 COMMAND ${CMAKE_COMMAND} -E make_directory dl 67 # COMMAND ${CMAKE_COMMAND} -E copy libstdc++.tag dl 68 COMMAND ${WGET_EXECUTABLE} wget -P dl -N libstdc++.tag.tmp http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/libstdc++.tag 69 COMMAND ${CMAKE_COMMAND} -E rename dl/libstdc++.tag libstdc++.tag 70 COMMAND ${CMAKE_COMMAND} -E remove dl/libstdc++.tag 71 COMMAND ${CMAKE_COMMAND} -E remove_directory dl 72 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} 73 ) 74 ENDIF() -
doc/Doxyfile.in
r803 r1039 1 # Doxyfile 1. 5.91 # Doxyfile 1.7.3 2 2 3 3 #--------------------------------------------------------------------------- … … 5 5 #--------------------------------------------------------------------------- 6 6 DOXYFILE_ENCODING = UTF-8 7 PROJECT_NAME = @PACKAGE_NAME@ 8 PROJECT_NUMBER = @PACKAGE_VERSION@ 7 PROJECT_NAME = 8 PROJECT_NUMBER = 9 PROJECT_BRIEF = 10 PROJECT_LOGO = 9 11 OUTPUT_DIRECTORY = 10 12 CREATE_SUBDIRS = NO … … 30 32 OPTIMIZE_FOR_FORTRAN = NO 31 33 OPTIMIZE_OUTPUT_VHDL = NO 34 EXTENSION_MAPPING = 32 35 BUILTIN_STL_SUPPORT = YES 33 36 CPP_CLI_SUPPORT = NO … … 55 58 HIDE_SCOPE_NAMES = YES 56 59 SHOW_INCLUDE_FILES = YES 60 FORCE_LOCAL_INCLUDES = NO 57 61 INLINE_INFO = YES 58 62 SORT_MEMBER_DOCS = NO 59 63 SORT_BRIEF_DOCS = NO 64 SORT_MEMBERS_CTORS_1ST = NO 60 65 SORT_GROUP_NAMES = NO 61 66 SORT_BY_SCOPE_NAME = NO 67 STRICT_PROTO_MATCHING = NO 62 68 GENERATE_TODOLIST = YES 63 69 GENERATE_TESTLIST = YES … … 71 77 SHOW_NAMESPACES = YES 72 78 FILE_VERSION_FILTER = 73 LAYOUT_FILE = DoxygenLayout.xml79 LAYOUT_FILE = "@abs_top_srcdir@/doc/DoxygenLayout.xml" 74 80 #--------------------------------------------------------------------------- 75 81 # configuration options related to warning and progress messages … … 92 98 "@abs_top_srcdir@/tools" \ 93 99 "@abs_top_srcdir@/test/test_tools.h" \ 100 "@abs_top_builddir@/doc/mainpage.dox" \ 94 101 "@abs_top_builddir@/doc/references.dox" 95 102 INPUT_ENCODING = UTF-8 … … 112 119 FILTER_PATTERNS = 113 120 FILTER_SOURCE_FILES = NO 121 FILTER_SOURCE_PATTERNS = 114 122 #--------------------------------------------------------------------------- 115 123 # configuration options related to source browsing 116 124 #--------------------------------------------------------------------------- 117 SOURCE_BROWSER = NO125 SOURCE_BROWSER = @LEMON_DOC_SOURCE_BROWSER@ 118 126 INLINE_SOURCES = NO 119 127 STRIP_CODE_COMMENTS = YES … … 138 146 HTML_FOOTER = 139 147 HTML_STYLESHEET = 148 HTML_COLORSTYLE_HUE = 220 149 HTML_COLORSTYLE_SAT = 100 150 HTML_COLORSTYLE_GAMMA = 80 151 HTML_TIMESTAMP = YES 140 152 HTML_ALIGN_MEMBERS = YES 141 HTML_DYNAMIC_SECTIONS = NO153 HTML_DYNAMIC_SECTIONS = YES 142 154 GENERATE_DOCSET = NO 143 155 DOCSET_FEEDNAME = "Doxygen generated docs" 144 156 DOCSET_BUNDLE_ID = org.doxygen.Project 157 DOCSET_PUBLISHER_ID = org.doxygen.Publisher 158 DOCSET_PUBLISHER_NAME = Publisher 145 159 GENERATE_HTMLHELP = NO 146 160 CHM_FILE = … … 154 168 QHP_NAMESPACE = org.doxygen.Project 155 169 QHP_VIRTUAL_FOLDER = doc 170 QHP_CUST_FILTER_NAME = 171 QHP_CUST_FILTER_ATTRS = 172 QHP_SECT_FILTER_ATTRS = 156 173 QHG_LOCATION = 174 GENERATE_ECLIPSEHELP = NO 175 ECLIPSE_DOC_ID = org.doxygen.Project 157 176 DISABLE_INDEX = NO 158 177 ENUM_VALUES_PER_LINE = 4 159 178 GENERATE_TREEVIEW = NO 179 USE_INLINE_TREES = NO 160 180 TREEVIEW_WIDTH = 250 181 EXT_LINKS_IN_WINDOW = NO 161 182 FORMULA_FONTSIZE = 10 183 FORMULA_TRANSPARENT = YES 184 USE_MATHJAX = NO 185 MATHJAX_RELPATH = http://www.mathjax.org/mathjax 186 SEARCHENGINE = YES 187 SERVER_BASED_SEARCH = NO 162 188 #--------------------------------------------------------------------------- 163 189 # configuration options related to the LaTeX output … … 176 202 LATEX_BATCHMODE = NO 177 203 LATEX_HIDE_INDICES = NO 204 LATEX_SOURCE_CODE = NO 178 205 #--------------------------------------------------------------------------- 179 206 # configuration options related to the RTF output … … 224 251 SKIP_FUNCTION_MACROS = YES 225 252 #--------------------------------------------------------------------------- 226 # Options related to the search engine227 #--------------------------------------------------------------------------- 228 TAGFILES = "@abs_top_ srcdir@/doc/libstdc++.tag = http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/ "253 # Configuration::additions related to external references 254 #--------------------------------------------------------------------------- 255 TAGFILES = "@abs_top_builddir@/doc/libstdc++.tag = http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/ " 229 256 GENERATE_TAGFILE = html/lemon.tag 230 257 ALLEXTERNALS = NO … … 238 265 HIDE_UNDOC_RELATIONS = YES 239 266 HAVE_DOT = YES 267 DOT_NUM_THREADS = 0 240 268 DOT_FONTNAME = FreeSans 241 269 DOT_FONTSIZE = 10 … … 255 283 DOT_PATH = 256 284 DOTFILE_DIRS = 285 MSCFILE_DIRS = 257 286 DOT_GRAPH_MAX_NODES = 50 258 287 MAX_DOT_GRAPH_DEPTH = 0 … … 261 290 GENERATE_LEGEND = YES 262 291 DOT_CLEANUP = YES 263 #---------------------------------------------------------------------------264 # Configuration::additions related to the search engine265 #---------------------------------------------------------------------------266 SEARCHENGINE = NO -
doc/DoxygenLayout.xml
r316 r1036 3 3 <navindex> 4 4 <tab type="mainpage" visible="yes" title=""/> 5 <tab type="modules" visible="yes" title="" />5 <tab type="modules" visible="yes" title="" intro=""/> 6 6 <tab type="classes" visible="yes" title=""> 7 <tab type="classes" visible="yes" title="" />8 <tab type="classindex" visible="$ALPHABETICAL_INDEX" title=""/> 9 <tab type="hierarchy" visible="yes" title="" />10 <tab type="classmembers" visible="yes" title="" />7 <tab type="classes" visible="yes" title="" intro=""/> 8 <tab type="classindex" visible="$ALPHABETICAL_INDEX" title=""/> 9 <tab type="hierarchy" visible="yes" title="" intro=""/> 10 <tab type="classmembers" visible="yes" title="" intro=""/> 11 11 </tab> 12 12 <tab type="namespaces" visible="yes" title=""> 13 <tab type="namespaces" visible="yes" title="" />14 <tab type="namespacemembers" visible="yes" title="" />13 <tab type="namespaces" visible="yes" title="" intro=""/> 14 <tab type="namespacemembers" visible="yes" title="" intro=""/> 15 15 </tab> 16 16 <tab type="files" visible="yes" title=""> 17 <tab type="files" visible="yes" title="" />18 <tab type="globals" visible="yes" title="" />17 <tab type="files" visible="yes" title="" intro=""/> 18 <tab type="globals" visible="yes" title="" intro=""/> 19 19 </tab> 20 <tab type="dirs" visible="yes" title="" />21 <tab type="examples" visible="yes" title="" />22 <tab type="pages" visible="yes" title="" />20 <tab type="dirs" visible="yes" title="" intro=""/> 21 <tab type="examples" visible="yes" title="" intro=""/> 22 <tab type="pages" visible="yes" title="" intro=""/> 23 23 </navindex> 24 24 -
doc/groups.dox
r956 r963 264 264 265 265 /** 266 @defgroup matrices Matrices267 @ingroup datas268 \brief Two dimensional data storages implemented in LEMON.269 270 This group contains two dimensional data storages implemented in LEMON.271 */272 273 /**274 266 @defgroup auxdat Auxiliary Data Structures 275 267 @ingroup datas … … 292 284 rectangular bounding box of a set of \ref lemon::dim2::Point 293 285 "dim2::Point"'s. 294 */295 296 /**297 @defgroup matrices Matrices298 @ingroup auxdat299 \brief Two dimensional data storages implemented in LEMON.300 301 This group contains two dimensional data storages implemented in LEMON.302 286 */ 303 287 … … 335 319 but the digraph should not contain directed cycles with negative total 336 320 length. 337 - \ref FloydWarshall "Floyd-Warshall" and \ref Johnson "Johnson" algorithms338 for solving the \e all-pairs \e shortest \e paths \e problem when arc339 lenghts can be either positive or negative, but the digraph should340 not contain directed cycles with negative total length.341 321 - \ref Suurballe A successive shortest path algorithm for finding 342 322 arc-disjoint paths between two nodes having minimum total length. … … 372 352 \f[ 0 \leq f(uv) \leq cap(uv) \quad \forall uv\in A \f] 373 353 374 LEMON contains several algorithms for solving maximum flow problems: 375 - \ref EdmondsKarp Edmonds-Karp algorithm 376 \ref edmondskarp72theoretical. 377 - \ref Preflow Goldberg-Tarjan's preflow push-relabel algorithm 378 \ref goldberg88newapproach. 379 - \ref DinitzSleatorTarjan Dinitz's blocking flow algorithm with dynamic trees 380 \ref dinic70algorithm, \ref sleator83dynamic. 381 - \ref GoldbergTarjan !Preflow push-relabel algorithm with dynamic trees 382 \ref goldberg88newapproach, \ref sleator83dynamic. 383 384 In most cases the \ref Preflow algorithm provides the 385 fastest method for computing a maximum flow. All implementations 386 also provide functions to query the minimum cut, which is the dual 387 problem of maximum flow. 354 \ref Preflow is an efficient implementation of Goldberg-Tarjan's 355 preflow push-relabel algorithm \ref goldberg88newapproach for finding 356 maximum flows. It also provides functions to query the minimum cut, 357 which is the dual problem of maximum flow. 388 358 389 359 \ref Circulation is a preflow push-relabel algorithm implemented directly … … 442 412 - \ref HaoOrlin "Hao-Orlin algorithm" for calculating minimum cut 443 413 in directed graphs. 444 - \ref NagamochiIbaraki "Nagamochi-Ibaraki algorithm" for445 calculating minimum cut in undirected graphs.446 414 - \ref GomoryHu "Gomory-Hu tree computation" for calculating 447 415 all-pairs minimum cut in undirected graphs. … … 473 441 474 442 LEMON contains three algorithms for solving the minimum mean cycle problem: 475 - \ref Karp "Karp"'s original algorithm \ref amo93networkflows,443 - \ref KarpMmc Karp's original algorithm \ref amo93networkflows, 476 444 \ref dasdan98minmeancycle. 477 - \ref HartmannOrlin "Hartmann-Orlin"'s algorithm, which is an improved445 - \ref HartmannOrlinMmc Hartmann-Orlin's algorithm, which is an improved 478 446 version of Karp's algorithm \ref dasdan98minmeancycle. 479 - \ref Howard "Howard"'s policy iteration algorithm447 - \ref HowardMmc Howard's policy iteration algorithm 480 448 \ref dasdan98minmeancycle. 481 449 482 In practice, the Howard algorithm proved to be by far the most efficient483 one, though the best known theoretical bound on its running time is 484 exponential.485 Both Karp and HartmannOrlin algorithms run in time O(ne) and use space486 O(n<sup>2</sup>+e), but the latter one is typically faster due to the 487 applied early termination scheme.450 In practice, the \ref HowardMmc "Howard" algorithm proved to be by far the 451 most efficient one, though the best known theoretical bound on its running 452 time is exponential. 453 Both \ref KarpMmc "Karp" and \ref HartmannOrlinMmc "Hartmann-Orlin" algorithms 454 run in time O(ne) and use space O(n<sup>2</sup>+e), but the latter one is 455 typically faster due to the applied early termination scheme. 488 456 */ 489 457 … … 506 474 507 475 The matching algorithms implemented in LEMON: 508 - \ref MaxBipartiteMatching Hopcroft-Karp augmenting path algorithm509 for calculating maximum cardinality matching in bipartite graphs.510 - \ref PrBipartiteMatching Push-relabel algorithm511 for calculating maximum cardinality matching in bipartite graphs.512 - \ref MaxWeightedBipartiteMatching513 Successive shortest path algorithm for calculating maximum weighted514 matching and maximum weighted bipartite matching in bipartite graphs.515 - \ref MinCostMaxBipartiteMatching516 Successive shortest path algorithm for calculating minimum cost maximum517 matching in bipartite graphs.518 476 - \ref MaxMatching Edmond's blossom shrinking algorithm for calculating 519 477 maximum cardinality matching in general graphs. … … 560 518 561 519 /** 562 @defgroup approx Approximation Algorithms563 @ingroup algs564 \brief Approximation algorithms.565 566 This group contains the approximation and heuristic algorithms567 implemented in LEMON.568 */569 570 /**571 520 @defgroup auxalg Auxiliary Algorithms 572 521 @ingroup algs … … 597 546 The currently supported solvers are \ref glpk, \ref clp, \ref cbc, 598 547 \ref cplex, \ref soplex. 599 */600 601 /**602 @defgroup lp_utils Tools for Lp and Mip Solvers603 @ingroup lp_group604 \brief Helper tools to the Lp and Mip solvers.605 606 This group adds some helper tools to general optimization framework607 implemented in LEMON.608 */609 610 /**611 @defgroup metah Metaheuristics612 @ingroup gen_opt_group613 \brief Metaheuristics for LEMON library.614 615 This group contains some metaheuristic optimization tools.616 548 */ 617 549 -
lemon/CMakeLists.txt
r726 r1012 7 7 ${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake 8 8 ${CMAKE_CURRENT_BINARY_DIR}/config.h 9 ) 10 11 CONFIGURE_FILE( 12 ${CMAKE_CURRENT_SOURCE_DIR}/lemon.pc.cmake 13 ${CMAKE_CURRENT_BINARY_DIR}/lemon.pc 14 @ONLY 9 15 ) 10 16 … … 67 73 COMPONENT headers 68 74 ) 75 76 INSTALL( 77 FILES ${CMAKE_CURRENT_BINARY_DIR}/lemon.pc 78 DESTINATION lib/pkgconfig 79 ) 80 -
lemon/arg_parser.h
r956 r959 36 36 37 37 ///Exception used by ArgParser 38 39 ///Exception used by ArgParser. 40 /// 38 41 class ArgParserException : public Exception { 39 42 public: 43 /// Reasons for failure 44 45 /// Reasons for failure. 46 /// 40 47 enum Reason { 41 HELP, /// <tt>--help</tt> option was given42 UNKNOWN_OPT, /// Unknown option was given43 INVALID_OPT /// Invalid combination of options48 HELP, ///< <tt>--help</tt> option was given. 49 UNKNOWN_OPT, ///< Unknown option was given. 50 INVALID_OPT ///< Invalid combination of options. 44 51 }; 45 52 -
lemon/bellman_ford.h
r956 r960 29 29 #include <lemon/error.h> 30 30 #include <lemon/maps.h> 31 #include <lemon/tolerance.h>32 31 #include <lemon/path.h> 33 32 … … 36 35 namespace lemon { 37 36 38 /// \brief Default operation traits for the BellmanFord algorithm class.37 /// \brief Default OperationTraits for the BellmanFord algorithm class. 39 38 /// 40 39 /// This operation traits class defines all computational operations … … 43 42 /// If the numeric type does not have infinity value, then the maximum 44 43 /// value is used as extremal infinity value. 45 ///46 /// \see BellmanFordToleranceOperationTraits47 44 template < 48 45 typename V, 49 46 bool has_inf = std::numeric_limits<V>::has_infinity> 50 47 struct BellmanFordDefaultOperationTraits { 51 /// \ brief Value type for the algorithm.48 /// \e 52 49 typedef V Value; 53 50 /// \brief Gives back the zero value of the type. … … 85 82 static bool less(const Value& left, const Value& right) { 86 83 return left < right; 87 }88 };89 90 /// \brief Operation traits for the BellmanFord algorithm class91 /// using tolerance.92 ///93 /// This operation traits class defines all computational operations94 /// and constants that are used in the Bellman-Ford algorithm.95 /// The only difference between this implementation and96 /// \ref BellmanFordDefaultOperationTraits is that this class uses97 /// the \ref Tolerance "tolerance technique" in its \ref less()98 /// function.99 ///100 /// \tparam V The value type.101 /// \tparam eps The epsilon value for the \ref less() function.102 /// By default, it is the epsilon value used by \ref Tolerance103 /// "Tolerance<V>".104 ///105 /// \see BellmanFordDefaultOperationTraits106 #ifdef DOXYGEN107 template <typename V, V eps>108 #else109 template <110 typename V,111 V eps = Tolerance<V>::def_epsilon>112 #endif113 struct BellmanFordToleranceOperationTraits {114 /// \brief Value type for the algorithm.115 typedef V Value;116 /// \brief Gives back the zero value of the type.117 static Value zero() {118 return static_cast<Value>(0);119 }120 /// \brief Gives back the positive infinity value of the type.121 static Value infinity() {122 return std::numeric_limits<Value>::infinity();123 }124 /// \brief Gives back the sum of the given two elements.125 static Value plus(const Value& left, const Value& right) {126 return left + right;127 }128 /// \brief Gives back \c true only if the first value is less than129 /// the second.130 static bool less(const Value& left, const Value& right) {131 return left + eps < right;132 84 } 133 85 }; … … 156 108 /// It defines the used operations and the infinity value for the 157 109 /// given \c Value type. 158 /// \see BellmanFordDefaultOperationTraits, 159 /// BellmanFordToleranceOperationTraits 110 /// \see BellmanFordDefaultOperationTraits 160 111 typedef BellmanFordDefaultOperationTraits<Value> OperationTraits; 161 112 … … 887 838 /// It defines the used operations and the infinity value for the 888 839 /// given \c Value type. 889 /// \see BellmanFordDefaultOperationTraits, 890 /// BellmanFordToleranceOperationTraits 840 /// \see BellmanFordDefaultOperationTraits 891 841 typedef BellmanFordDefaultOperationTraits<Value> OperationTraits; 892 842 -
lemon/bits/edge_set_extender.h
r956 r968 281 281 typedef EdgeSetExtender Graph; 282 282 283 typedef True UndirectedTag; 284 283 285 typedef typename Parent::Node Node; 284 286 typedef typename Parent::Arc Arc; -
lemon/bits/graph_adaptor_extender.h
r664 r965 182 182 typedef GraphAdaptorExtender Adaptor; 183 183 184 typedef True UndirectedTag; 185 184 186 typedef typename Parent::Node Node; 185 187 typedef typename Parent::Arc Arc; -
lemon/bits/path_dump.h
r576 r973 50 50 51 51 bool empty() const { 52 return predMap[target] != INVALID;52 return predMap[target] == INVALID; 53 53 } 54 54 … … 124 124 125 125 bool empty() const { 126 return source != target;126 return predMatrixMap(source, target) == INVALID; 127 127 } 128 128 -
lemon/core.h
r956 r986 395 395 static void copy(const From& from, Digraph &to, 396 396 NodeRefMap& nodeRefMap, ArcRefMap& arcRefMap) { 397 to.clear(); 397 398 for (typename From::NodeIt it(from); it != INVALID; ++it) { 398 399 nodeRefMap[it] = to.addNode(); … … 422 423 static void copy(const From& from, Graph &to, 423 424 NodeRefMap& nodeRefMap, EdgeRefMap& edgeRefMap) { 425 to.clear(); 424 426 for (typename From::NodeIt it(from); it != INVALID; ++it) { 425 427 nodeRefMap[it] = to.addNode(); -
lemon/dfs.h
r956 r1010 566 566 void start(Node t) 567 567 { 568 while ( !emptyQueue() && G->target(_stack[_stack_head])!=t)568 while ( !emptyQueue() && !(*_reached)[t] ) 569 569 processNextArc(); 570 570 } … … 1513 1513 /// with addSource() before using this function. 1514 1514 void start(Node t) { 1515 while ( !emptyQueue() && _digraph->target(_stack[_stack_head]) != t)1515 while ( !emptyQueue() && !(*_reached)[t] ) 1516 1516 processNextArc(); 1517 1517 } -
lemon/hartmann_orlin_mmc.h
r956 r959 39 39 /// \tparam GR The type of the digraph. 40 40 /// \tparam CM The type of the cost map. 41 /// It must conform to the \ref concepts::Rea _data "Rea_data" concept.41 /// It must conform to the \ref concepts::ReadMap "ReadMap" concept. 42 42 #ifdef DOXYGEN 43 43 template <typename GR, typename CM> … … 100 100 /// a directed cycle of minimum mean cost in a digraph 101 101 /// \ref amo93networkflows, \ref dasdan98minmeancycle. 102 /// It is an improved version of \ref Karp "Karp"'s original algorithm,102 /// It is an improved version of \ref KarpMmc "Karp"'s original algorithm, 103 103 /// it applies an efficient early termination scheme. 104 104 /// It runs in time O(ne) and uses space O(n<sup>2</sup>+e). -
lemon/network_simplex.h
r956 r978 1078 1078 ART_COST = std::numeric_limits<Cost>::max() / 2 + 1; 1079 1079 } else { 1080 ART_COST = std::numeric_limits<Cost>::min();1080 ART_COST = 0; 1081 1081 for (int i = 0; i != _arc_num; ++i) { 1082 1082 if (_cost[i] > ART_COST) ART_COST = _cost[i]; … … 1590 1590 if (_sum_supply == 0) { 1591 1591 if (_stype == GEQ) { 1592 Cost max_pot = std::numeric_limits<Cost>::min();1592 Cost max_pot = -std::numeric_limits<Cost>::max(); 1593 1593 for (int i = 0; i != _node_num; ++i) { 1594 1594 if (_pi[i] > max_pot) max_pot = _pi[i]; -
lemon/preflow.h
r956 r1029 544 544 _flow->set(e, (*_capacity)[e]); 545 545 (*_excess)[u] += rem; 546 if (u != _target && !_level->active(u)) {547 _level->activate(u);548 }549 546 } 550 547 } … … 556 553 _flow->set(e, 0); 557 554 (*_excess)[v] += rem; 558 if (v != _target && !_level->active(v)) { 559 _level->activate(v); 560 } 561 } 562 } 555 } 556 } 557 for (NodeIt n(_graph); n != INVALID; ++n) 558 if(n!=_source && n!=_target && _tolerance.positive((*_excess)[n])) 559 _level->activate(n); 560 563 561 return true; 564 562 } … … 577 575 _phase = true; 578 576 579 Node n = _level->highestActive(); 580 int level = _level->highestActiveLevel(); 581 while (n != INVALID) { 577 while (true) { 582 578 int num = _node_num; 583 579 584 while (num > 0 && n != INVALID) { 580 Node n = INVALID; 581 int level = -1; 582 583 while (num > 0) { 584 n = _level->highestActive(); 585 if (n == INVALID) goto first_phase_done; 586 level = _level->highestActiveLevel(); 587 --num; 588 585 589 Value excess = (*_excess)[n]; 586 590 int new_level = _level->maxLevel(); … … 648 652 _level->deactivate(n); 649 653 } 650 651 n = _level->highestActive(); 652 level = _level->highestActiveLevel(); 654 } 655 656 num = _node_num * 20; 657 while (num > 0) { 658 while (level >= 0 && _level->activeFree(level)) { 659 --level; 660 } 661 if (level == -1) { 662 n = _level->highestActive(); 663 level = _level->highestActiveLevel(); 664 if (n == INVALID) goto first_phase_done; 665 } else { 666 n = _level->activeOn(level); 667 } 653 668 --num; 654 } 655 656 num = _node_num * 20; 657 while (num > 0 && n != INVALID) { 669 658 670 Value excess = (*_excess)[n]; 659 671 int new_level = _level->maxLevel(); … … 721 733 _level->deactivate(n); 722 734 } 723 724 while (level >= 0 && _level->activeFree(level)) { 725 --level; 726 } 727 if (level == -1) { 728 n = _level->highestActive(); 729 level = _level->highestActiveLevel(); 730 } else { 731 n = _level->activeOn(level); 732 } 733 --num; 734 } 735 } 735 } 736 } 737 first_phase_done:; 736 738 } 737 739 -
test/CMakeLists.txt
r953 r1035 46 46 47 47 IF(LEMON_HAVE_LP) 48 ADD_EXECUTABLE(lp_test lp_test.cc) 48 IF(${CMAKE_BUILD_TYPE} STREQUAL "Maintainer") 49 ADD_EXECUTABLE(lp_test lp_test.cc) 50 ELSE() 51 ADD_EXECUTABLE(lp_test EXCLUDE_FROM_ALL lp_test.cc) 52 ENDIF() 53 49 54 SET(LP_TEST_LIBS lemon) 50 55 … … 82 87 83 88 IF(LEMON_HAVE_MIP) 84 ADD_EXECUTABLE(mip_test mip_test.cc) 89 IF(${CMAKE_BUILD_TYPE} STREQUAL "Maintainer") 90 ADD_EXECUTABLE(mip_test mip_test.cc) 91 ELSE() 92 ADD_EXECUTABLE(mip_test EXCLUDE_FROM_ALL mip_test.cc) 93 ENDIF() 94 85 95 SET(MIP_TEST_LIBS lemon) 86 96 … … 118 128 119 129 FOREACH(TEST_NAME ${TESTS}) 120 ADD_EXECUTABLE(${TEST_NAME} ${TEST_NAME}.cc) 130 IF(${CMAKE_BUILD_TYPE} STREQUAL "Maintainer") 131 ADD_EXECUTABLE(${TEST_NAME} ${TEST_NAME}.cc) 132 ELSE() 133 ADD_EXECUTABLE(${TEST_NAME} EXCLUDE_FROM_ALL ${TEST_NAME}.cc) 134 ENDIF() 121 135 TARGET_LINK_LIBRARIES(${TEST_NAME} lemon) 122 136 ADD_TEST(${TEST_NAME} ${TEST_NAME}) 137 ADD_DEPENDENCIES(check ${TEST_NAME}) 123 138 ENDFOREACH() -
test/bellman_ford_test.cc
r956 r960 105 105 ::SetDistMap<concepts::ReadWriteMap<Node,Value> > 106 106 ::SetOperationTraits<BellmanFordDefaultOperationTraits<Value> > 107 ::SetOperationTraits<BellmanFordToleranceOperationTraits<Value, 0> >108 107 ::Create bf_test(gr,length); 109 108 -
test/dfs_test.cc
r956 r1010 51 51 "@attributes\n" 52 52 "source 0\n" 53 "target 5\n"; 53 "target 5\n" 54 "source1 6\n" 55 "target1 3\n"; 56 54 57 55 58 void checkDfsCompile() … … 180 183 Digraph G; 181 184 Node s, t; 185 Node s1, t1; 182 186 183 187 std::istringstream input(test_lgf); … … 185 189 node("source", s). 186 190 node("target", t). 191 node("source1", s1). 192 node("target1", t1). 187 193 run(); 188 194 … … 211 217 212 218 { 219 Dfs<Digraph> dfs(G); 220 check(dfs.run(s1,t1) && dfs.reached(t1),"Node 3 is reachable from Node 6."); 221 } 222 223 { 213 224 NullMap<Node,Arc> myPredMap; 214 225 dfs(G).predMap(myPredMap).run(s); -
test/graph_copy_test.cc
r463 r984 30 30 const int nn = 10; 31 31 32 // Build a digraph 32 33 SmartDigraph from; 33 34 SmartDigraph::NodeMap<int> fnm(from); … … 52 53 } 53 54 55 // Test digraph copy 54 56 ListDigraph to; 55 57 ListDigraph::NodeMap<int> tnm(to); … … 69 71 nodeCrossRef(ncr).arcCrossRef(ecr). 70 72 node(fn, tn).arc(fa, ta).run(); 73 74 check(countNodes(from) == countNodes(to), "Wrong copy."); 75 check(countArcs(from) == countArcs(to), "Wrong copy."); 71 76 72 77 for (SmartDigraph::NodeIt it(from); it != INVALID; ++it) { … … 91 96 check(tn == nr[fn], "Wrong copy."); 92 97 check(ta == er[fa], "Wrong copy."); 98 99 // Test repeated copy 100 digraphCopy(from, to).run(); 101 102 check(countNodes(from) == countNodes(to), "Wrong copy."); 103 check(countArcs(from) == countArcs(to), "Wrong copy."); 93 104 } 94 105 … … 96 107 const int nn = 10; 97 108 109 // Build a graph 98 110 SmartGraph from; 99 111 SmartGraph::NodeMap<int> fnm(from); … … 123 135 } 124 136 137 // Test graph copy 125 138 ListGraph to; 126 139 ListGraph::NodeMap<int> tnm(to); … … 144 157 nodeCrossRef(ncr).arcCrossRef(acr).edgeCrossRef(ecr). 145 158 node(fn, tn).arc(fa, ta).edge(fe, te).run(); 159 160 check(countNodes(from) == countNodes(to), "Wrong copy."); 161 check(countEdges(from) == countEdges(to), "Wrong copy."); 162 check(countArcs(from) == countArcs(to), "Wrong copy."); 146 163 147 164 for (SmartGraph::NodeIt it(from); it != INVALID; ++it) { … … 181 198 check(ta == ar[fa], "Wrong copy."); 182 199 check(te == er[fe], "Wrong copy."); 200 201 // Test repeated copy 202 graphCopy(from, to).run(); 203 204 check(countNodes(from) == countNodes(to), "Wrong copy."); 205 check(countEdges(from) == countEdges(to), "Wrong copy."); 206 check(countArcs(from) == countArcs(to), "Wrong copy."); 183 207 } 184 208 -
test/preflow_test.cc
r956 r1029 157 157 } 158 158 159 void initFlowTest() 160 { 161 DIGRAPH_TYPEDEFS(SmartDigraph); 162 163 SmartDigraph g; 164 SmartDigraph::ArcMap<int> cap(g),iflow(g); 165 Node s=g.addNode(); Node t=g.addNode(); 166 Node n1=g.addNode(); Node n2=g.addNode(); 167 Arc a; 168 a=g.addArc(s,n1); cap[a]=20; iflow[a]=20; 169 a=g.addArc(n1,n2); cap[a]=10; iflow[a]=0; 170 a=g.addArc(n2,t); cap[a]=20; iflow[a]=0; 171 172 Preflow<SmartDigraph> pre(g,cap,s,t); 173 pre.init(iflow); 174 pre.startFirstPhase(); 175 check(pre.flowValue() == 10, "The incorrect max flow value."); 176 check(pre.minCut(s), "Wrong min cut (Node s)."); 177 check(pre.minCut(n1), "Wrong min cut (Node n1)."); 178 check(!pre.minCut(n2), "Wrong min cut (Node n2)."); 179 check(!pre.minCut(t), "Wrong min cut (Node t)."); 180 } 181 182 159 183 int main() { 160 184 … … 247 271 "The max flow value or the three min cut values are incorrect."); 248 272 273 initFlowTest(); 274 249 275 return 0; 250 276 }
Note: See TracChangeset
for help on using the changeset viewer.