1.1 --- a/AUTHORS Mon Jul 16 16:21:40 2018 +0200
1.2 +++ b/AUTHORS Wed Oct 17 19:14:07 2018 +0200
1.3 @@ -1,15 +1,15 @@
1.4 -The authors of the 1.x series are
1.5 +The main developers of release series 1.x are
1.6
1.7 * Balazs Dezso <deba@inf.elte.hu>
1.8 * Alpar Juttner <alpar@cs.elte.hu>
1.9 * Peter Kovacs <kpeter@inf.elte.hu>
1.10 * Akos Ladanyi <ladanyi@tmit.bme.hu>
1.11
1.12 -For more details on the actual contribution, please visit the history
1.13 -of the main LEMON source repository: http://lemon.cs.elte.hu/hg/lemon
1.14 +For more complete list of contributors, please visit the history of
1.15 +the LEMON source code repository: http://lemon.cs.elte.hu/hg/lemon
1.16
1.17 -Moreover, this version is heavily based on the 0.x series of
1.18 -LEMON. Here is the list of people who contributed to those versions.
1.19 +Moreover, this version is heavily based on version 0.x of LEMON. Here
1.20 +is the list of people who contributed to those versions.
1.21
1.22 * Mihaly Barasz <klao@cs.elte.hu>
1.23 * Johanna Becker <beckerjc@cs.elte.hu>
2.1 --- a/CMakeLists.txt Mon Jul 16 16:21:40 2018 +0200
2.2 +++ b/CMakeLists.txt Wed Oct 17 19:14:07 2018 +0200
2.3 @@ -1,4 +1,13 @@
2.4 -CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
2.5 +CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
2.6 +
2.7 +IF(POLICY CMP0048)
2.8 + CMAKE_POLICY(SET CMP0048 OLD)
2.9 +ENDIF(POLICY CMP0048)
2.10 +
2.11 +IF(POLICY CMP0026)
2.12 + #This is for copying the dll's needed by glpk (in lp_test and mip_test)
2.13 + CMAKE_POLICY(SET CMP0026 OLD)
2.14 +ENDIF(POLICY CMP0026)
2.15
2.16 SET(PROJECT_NAME "LEMON")
2.17 PROJECT(${PROJECT_NAME})
2.18 @@ -12,29 +21,47 @@
2.19 SET(LEMON_VERSION $ENV{LEMON_VERSION} CACHE STRING "LEMON version string.")
2.20 ELSE()
2.21 EXECUTE_PROCESS(
2.22 - COMMAND ${PYTHON_EXECUTABLE} ./scripts/chg-len.py
2.23 + COMMAND
2.24 + hg log -r. --template "{latesttag}"
2.25 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
2.26 - OUTPUT_VARIABLE HG_REVISION_PATH
2.27 + OUTPUT_VARIABLE HG_REVISION_TAG
2.28 ERROR_QUIET
2.29 OUTPUT_STRIP_TRAILING_WHITESPACE
2.30 )
2.31 EXECUTE_PROCESS(
2.32 - COMMAND hg id -i
2.33 + COMMAND
2.34 + hg log -r. --template "{latesttagdistance}"
2.35 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
2.36 - OUTPUT_VARIABLE HG_REVISION
2.37 + OUTPUT_VARIABLE HG_REVISION_DIST
2.38 ERROR_QUIET
2.39 OUTPUT_STRIP_TRAILING_WHITESPACE
2.40 )
2.41 - IF(HG_REVISION STREQUAL "")
2.42 + EXECUTE_PROCESS(
2.43 + COMMAND
2.44 + hg log -r. --template "{node|short}"
2.45 + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
2.46 + OUTPUT_VARIABLE HG_REVISION_ID
2.47 + ERROR_QUIET
2.48 + OUTPUT_STRIP_TRAILING_WHITESPACE
2.49 + )
2.50 +
2.51 + IF(HG_REVISION_TAG STREQUAL "")
2.52 SET(HG_REVISION_ID "hg-tip")
2.53 ELSE()
2.54 - IF(HG_REVISION_PATH STREQUAL "")
2.55 - SET(HG_REVISION_ID ${HG_REVISION})
2.56 + IF(HG_REVISION_TAG STREQUAL "null")
2.57 + SET(HG_REVISION_TAG "trunk")
2.58 + ELSEIF(HG_REVISION_TAG MATCHES "^r")
2.59 + STRING(SUBSTRING ${HG_REVISION_TAG} 1 -1 HG_REVISION_TAG)
2.60 + ENDIF()
2.61 + IF(HG_REVISION_DIST STREQUAL "0")
2.62 + SET(HG_REVISION ${HG_REVISION_TAG})
2.63 ELSE()
2.64 - SET(HG_REVISION_ID ${HG_REVISION_PATH}.${HG_REVISION})
2.65 + SET(HG_REVISION
2.66 + "${HG_REVISION_TAG}+${HG_REVISION_DIST}-${HG_REVISION_ID}")
2.67 ENDIF()
2.68 ENDIF()
2.69 - SET(LEMON_VERSION ${HG_REVISION_ID} CACHE STRING "LEMON version string.")
2.70 +
2.71 + SET(LEMON_VERSION ${HG_REVISION} CACHE STRING "LEMON version string.")
2.72 ENDIF()
2.73
2.74 SET(PROJECT_VERSION ${LEMON_VERSION})
2.75 @@ -43,9 +70,84 @@
2.76
2.77 FIND_PACKAGE(Doxygen)
2.78 FIND_PACKAGE(Ghostscript)
2.79 -FIND_PACKAGE(GLPK 4.33)
2.80 -FIND_PACKAGE(CPLEX)
2.81 -FIND_PACKAGE(COIN)
2.82 +
2.83 +IF(WIN32)
2.84 + SET(LEMON_WIN32 TRUE)
2.85 +ENDIF(WIN32)
2.86 +
2.87 +SET(LEMON_ENABLE_GLPK YES CACHE STRING "Enable GLPK solver backend.")
2.88 +SET(LEMON_ENABLE_ILOG YES CACHE STRING "Enable ILOG (CPLEX) solver backend.")
2.89 +SET(LEMON_ENABLE_COIN YES CACHE STRING "Enable COIN solver backend.")
2.90 +SET(LEMON_ENABLE_SOPLEX YES CACHE STRING "Enable SoPlex solver backend.")
2.91 +
2.92 +IF(LEMON_ENABLE_GLPK)
2.93 + FIND_PACKAGE(GLPK 4.33)
2.94 + IF(GLPK_FOUND)
2.95 + SET(LEMON_HAVE_LP TRUE)
2.96 + SET(LEMON_HAVE_MIP TRUE)
2.97 + SET(LEMON_HAVE_GLPK TRUE)
2.98 + ENDIF(GLPK_FOUND)
2.99 +ENDIF(LEMON_ENABLE_GLPK)
2.100 +IF(LEMON_ENABLE_ILOG)
2.101 + FIND_PACKAGE(ILOG)
2.102 + IF(ILOG_FOUND)
2.103 + SET(LEMON_HAVE_LP TRUE)
2.104 + SET(LEMON_HAVE_MIP TRUE)
2.105 + SET(LEMON_HAVE_CPLEX TRUE)
2.106 + ENDIF(ILOG_FOUND)
2.107 +ENDIF(LEMON_ENABLE_ILOG)
2.108 +IF(LEMON_ENABLE_COIN)
2.109 + FIND_PACKAGE(COIN)
2.110 + IF(COIN_FOUND)
2.111 + SET(LEMON_HAVE_LP TRUE)
2.112 + SET(LEMON_HAVE_MIP TRUE)
2.113 + SET(LEMON_HAVE_CLP TRUE)
2.114 + SET(LEMON_HAVE_CBC TRUE)
2.115 + ENDIF(COIN_FOUND)
2.116 +ENDIF(LEMON_ENABLE_COIN)
2.117 +IF(LEMON_ENABLE_SOPLEX)
2.118 + FIND_PACKAGE(SOPLEX)
2.119 + IF(SOPLEX_FOUND)
2.120 + SET(LEMON_HAVE_LP TRUE)
2.121 + SET(LEMON_HAVE_SOPLEX TRUE)
2.122 + ENDIF(SOPLEX_FOUND)
2.123 +ENDIF(LEMON_ENABLE_SOPLEX)
2.124 +
2.125 +IF(ILOG_FOUND)
2.126 + SET(DEFAULT_LP "CPLEX")
2.127 + SET(DEFAULT_MIP "CPLEX")
2.128 +ELSEIF(COIN_FOUND)
2.129 + SET(DEFAULT_LP "CLP")
2.130 + SET(DEFAULT_MIP "CBC")
2.131 +ELSEIF(GLPK_FOUND)
2.132 + SET(DEFAULT_LP "GLPK")
2.133 + SET(DEFAULT_MIP "GLPK")
2.134 +ELSEIF(SOPLEX_FOUND)
2.135 + SET(DEFAULT_LP "SOPLEX")
2.136 +ENDIF()
2.137 +
2.138 +IF(NOT LEMON_DEFAULT_LP OR
2.139 + (NOT ILOG_FOUND AND (LEMON_DEFAULT_LP STREQUAL "CPLEX")) OR
2.140 + (NOT COIN_FOUND AND (LEMON_DEFAULT_LP STREQUAL "CLP")) OR
2.141 + (NOT GLPK_FOUND AND (LEMON_DEFAULT_LP STREQUAL "GLPK")) OR
2.142 + (NOT SOPLEX_FOUND AND (LEMON_DEFAULT_LP STREQUAL "SOPLEX")))
2.143 + SET(LEMON_DEFAULT_LP ${DEFAULT_LP} CACHE STRING
2.144 + "Default LP solver backend (GLPK, CPLEX, CLP or SOPLEX)" FORCE)
2.145 +ELSE()
2.146 + SET(LEMON_DEFAULT_LP ${DEFAULT_LP} CACHE STRING
2.147 + "Default LP solver backend (GLPK, CPLEX, CLP or SOPLEX)")
2.148 +ENDIF()
2.149 +IF(NOT LEMON_DEFAULT_MIP OR
2.150 + (NOT ILOG_FOUND AND (LEMON_DEFAULT_MIP STREQUAL "CPLEX")) OR
2.151 + (NOT COIN_FOUND AND (LEMON_DEFAULT_MIP STREQUAL "CBC")) OR
2.152 + (NOT GLPK_FOUND AND (LEMON_DEFAULT_MIP STREQUAL "GLPK")))
2.153 + SET(LEMON_DEFAULT_MIP ${DEFAULT_MIP} CACHE STRING
2.154 + "Default MIP solver backend (GLPK, CPLEX or CBC)" FORCE)
2.155 +ELSE()
2.156 + SET(LEMON_DEFAULT_MIP ${DEFAULT_MIP} CACHE STRING
2.157 + "Default MIP solver backend (GLPK, CPLEX or CBC)")
2.158 +ENDIF()
2.159 +
2.160
2.161 IF(DEFINED ENV{LEMON_CXX_WARNING})
2.162 SET(CXX_WARNING $ENV{LEMON_CXX_WARNING})
2.163 @@ -56,10 +158,13 @@
2.164 SET(CMAKE_C_FLAGS_DEBUG CACHE STRING "-ggdb")
2.165 ELSEIF(MSVC)
2.166 # This part is unnecessary 'casue the same is set by the lemon/core.h.
2.167 - # Still keep it as an example.
2.168 - SET(CXX_WARNING "/wd4250 /wd4355 /wd4503 /wd4800 /wd4996")
2.169 + # Still kept as an example.
2.170 +
2.171 + # SET(CXX_WARNING "/wd4250 /wd4267 /wd4355 /wd4503 /wd4800 /wd4996")
2.172 +
2.173 # Suppressed warnings:
2.174 # C4250: 'class1' : inherits 'class2::member' via dominance
2.175 + # C4267: conversion from 'size_t' to 'type', possible loss of data
2.176 # C4355: 'this' : used in base member initializer list
2.177 # C4503: 'function' : decorated name length exceeded, name was truncated
2.178 # C4800: 'type' : forcing value to bool 'true' or 'false'
2.179 @@ -73,20 +178,39 @@
2.180
2.181 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${LEMON_CXX_WARNING_FLAGS}")
2.182
2.183 -SET( CMAKE_CXX_FLAGS_MAINTAINER "-Werror -ggdb -O0" CACHE STRING
2.184 +IF(MSVC)
2.185 + SET(CMAKE_CXX_FLAGS "/bigobj ${CMAKE_CXX_FLAGS}")
2.186 + SET( CMAKE_CXX_FLAGS_MAINTAINER "/WX ${CMAKE_CXX_FLAGS_DEBUG}" CACHE STRING
2.187 "Flags used by the C++ compiler during maintainer builds."
2.188 - FORCE )
2.189 -SET( CMAKE_C_FLAGS_MAINTAINER "-Werror -O0" CACHE STRING
2.190 + )
2.191 + SET( CMAKE_C_FLAGS_MAINTAINER "/WX ${CMAKE_CXX_FLAGS_DEBUG}" CACHE STRING
2.192 "Flags used by the C compiler during maintainer builds."
2.193 - FORCE )
2.194 -SET( CMAKE_EXE_LINKER_FLAGS_MAINTAINER
2.195 - "-Wl,--warn-unresolved-symbols,--warn-once" CACHE STRING
2.196 + )
2.197 + SET( CMAKE_EXE_LINKER_FLAGS_MAINTAINER
2.198 + "${CMAKE_EXE_LINKER_FLAGS_DEBUG}" CACHE STRING
2.199 "Flags used for linking binaries during maintainer builds."
2.200 - FORCE )
2.201 -SET( CMAKE_SHARED_LINKER_FLAGS_MAINTAINER
2.202 - "-Wl,--warn-unresolved-symbols,--warn-once" CACHE STRING
2.203 + )
2.204 + SET( CMAKE_SHARED_LINKER_FLAGS_MAINTAINER
2.205 + "${CMAKE_SHARED_LINKER_FLAGS_DEBUG}" CACHE STRING
2.206 "Flags used by the shared libraries linker during maintainer builds."
2.207 - FORCE )
2.208 + )
2.209 +ELSE()
2.210 + SET( CMAKE_CXX_FLAGS_MAINTAINER "-Werror -ggdb -O0" CACHE STRING
2.211 + "Flags used by the C++ compiler during maintainer builds."
2.212 + )
2.213 + SET( CMAKE_C_FLAGS_MAINTAINER "-Werror -O0" CACHE STRING
2.214 + "Flags used by the C compiler during maintainer builds."
2.215 + )
2.216 + SET( CMAKE_EXE_LINKER_FLAGS_MAINTAINER
2.217 + "${CMAKE_EXE_LINKER_FLAGS_DEBUG}" CACHE STRING
2.218 + "Flags used for linking binaries during maintainer builds."
2.219 + )
2.220 + SET( CMAKE_SHARED_LINKER_FLAGS_MAINTAINER
2.221 + "${CMAKE_SHARED_LINKER_FLAGS_DEBUG}" CACHE STRING
2.222 + "Flags used by the shared libraries linker during maintainer builds."
2.223 + )
2.224 +ENDIF()
2.225 +
2.226 MARK_AS_ADVANCED(
2.227 CMAKE_CXX_FLAGS_MAINTAINER
2.228 CMAKE_C_FLAGS_MAINTAINER
2.229 @@ -114,7 +238,27 @@
2.230 CHECK_TYPE_SIZE("long long" LONG_LONG)
2.231 SET(LEMON_HAVE_LONG_LONG ${HAVE_LONG_LONG})
2.232
2.233 -INCLUDE(FindPythonInterp)
2.234 +INCLUDE(FindThreads)
2.235 +
2.236 +IF(NOT LEMON_THREADING)
2.237 + IF(CMAKE_USE_PTHREADS_INIT)
2.238 + SET(LEMON_THREADING "Pthread")
2.239 + ELSEIF(CMAKE_USE_WIN32_THREADS_INIT)
2.240 + SET(LEMON_THREADING "Win32")
2.241 + ELSE()
2.242 + SET(LEMON_THREADING "None")
2.243 + ENDIF()
2.244 +ENDIF()
2.245 +
2.246 +SET( LEMON_THREADING "${LEMON_THREADING}" CACHE STRING
2.247 + "Choose the threading library, options are: Pthread Win32 None."
2.248 + FORCE )
2.249 +
2.250 +IF(LEMON_THREADING STREQUAL "Pthread")
2.251 + SET(LEMON_USE_PTHREAD TRUE)
2.252 +ELSEIF(LEMON_THREADING STREQUAL "Win32")
2.253 + SET(LEMON_USE_WIN32_THREADS TRUE)
2.254 +ENDIF()
2.255
2.256 ENABLE_TESTING()
2.257
2.258 @@ -126,6 +270,7 @@
2.259
2.260 ADD_SUBDIRECTORY(lemon)
2.261 IF(${CMAKE_SOURCE_DIR} STREQUAL ${PROJECT_SOURCE_DIR})
2.262 + ADD_SUBDIRECTORY(contrib)
2.263 ADD_SUBDIRECTORY(demo)
2.264 ADD_SUBDIRECTORY(tools)
2.265 ADD_SUBDIRECTORY(doc)
2.266 @@ -149,6 +294,33 @@
2.267 )
2.268 ENDIF()
2.269
2.270 +CONFIGURE_FILE(
2.271 + ${PROJECT_SOURCE_DIR}/cmake/version.cmake.in
2.272 + ${PROJECT_BINARY_DIR}/cmake/version.cmake
2.273 + @ONLY
2.274 +)
2.275 +
2.276 +SET(ARCHIVE_BASE_NAME ${CMAKE_PROJECT_NAME})
2.277 +STRING(TOLOWER ${ARCHIVE_BASE_NAME} ARCHIVE_BASE_NAME)
2.278 +SET(ARCHIVE_NAME ${ARCHIVE_BASE_NAME}-${PROJECT_VERSION})
2.279 +ADD_CUSTOM_TARGET(dist
2.280 + COMMAND cmake -E remove_directory ${ARCHIVE_NAME}
2.281 + COMMAND hg archive ${ARCHIVE_NAME}
2.282 + COMMAND cmake -E copy cmake/version.cmake ${ARCHIVE_NAME}/cmake/version.cmake
2.283 + COMMAND tar -czf ${ARCHIVE_BASE_NAME}-nodoc-${PROJECT_VERSION}.tar.gz ${ARCHIVE_NAME}
2.284 + COMMAND zip -r ${ARCHIVE_BASE_NAME}-nodoc-${PROJECT_VERSION}.zip ${ARCHIVE_NAME}
2.285 + COMMAND cmake -E copy_directory doc/html ${ARCHIVE_NAME}/doc/html
2.286 + COMMAND tar -czf ${ARCHIVE_NAME}.tar.gz ${ARCHIVE_NAME}
2.287 + COMMAND zip -r ${ARCHIVE_NAME}.zip ${ARCHIVE_NAME}
2.288 + COMMAND cmake -E copy_directory doc/html ${ARCHIVE_BASE_NAME}-doc-${PROJECT_VERSION}
2.289 + COMMAND tar -czf ${ARCHIVE_BASE_NAME}-doc-${PROJECT_VERSION}.tar.gz ${ARCHIVE_BASE_NAME}-doc-${PROJECT_VERSION}
2.290 + COMMAND zip -r ${ARCHIVE_BASE_NAME}-doc-${PROJECT_VERSION}.zip ${ARCHIVE_BASE_NAME}-doc-${PROJECT_VERSION}
2.291 + COMMAND cmake -E remove_directory ${ARCHIVE_NAME}
2.292 + COMMAND cmake -E remove_directory ${ARCHIVE_BASE_NAME}-doc-${PROJECT_VERSION}
2.293 + DEPENDS html
2.294 + WORKING_DIRECTORY ${PROJECT_BINARY_DIR})
2.295 +
2.296 +# CPACK config (Basically for NSIS)
2.297 IF(${CMAKE_SOURCE_DIR} STREQUAL ${PROJECT_SOURCE_DIR})
2.298 SET(CPACK_PACKAGE_NAME ${PROJECT_NAME})
2.299 SET(CPACK_PACKAGE_VENDOR "EGRES")
3.1 --- a/INSTALL Mon Jul 16 16:21:40 2018 +0200
3.2 +++ b/INSTALL Wed Oct 17 19:14:07 2018 +0200
3.3 @@ -1,197 +1,167 @@
3.4 Installation Instructions
3.5 =========================
3.6
3.7 -Since you are reading this I assume you already obtained one of the release
3.8 -tarballs and successfully extracted it. The latest version of LEMON is
3.9 -available at our web page (http://lemon.cs.elte.hu/).
3.10 +This file contains instructions for building and installing LEMON from
3.11 +source on Linux. The process on Windows is similar.
3.12
3.13 -LEMON provides two different build environments, one is based on "autotool",
3.14 -while the other is based on "cmake". This file contains instructions only for
3.15 -the former one, which is the recommended build environment on Linux, Mac OSX
3.16 -and other unices or if you use Cygwin on Windows. For cmake installation
3.17 -instructions visit http://lemon.cs.elte.hu.
3.18 +Note that it is not necessary to install LEMON in order to use
3.19 +it. Instead, you can easily integrate it with your own code
3.20 +directly. For instructions, see
3.21 +https://lemon.cs.elte.hu/trac/lemon/wiki/HowToCompile
3.22 +
3.23
3.24 In order to install LEMON from the extracted source tarball you have to
3.25 issue the following commands:
3.26
3.27 - 1. `cd lemon-x.y.z'
3.28 + 1. Step into the root of the source directory.
3.29
3.30 - This command changes to the directory which was created when you
3.31 - extracted the sources. The x.y.z part is a version number.
3.32 + $ cd lemon-x.y.z
3.33
3.34 - 2. `./configure'
3.35 + 2. Create a build subdirectory and step into it.
3.36
3.37 - This command runs the configure shell script, which does some checks and
3.38 - creates the makefiles.
3.39 + $ mkdir build
3.40 + $ cd build
3.41
3.42 - 3. `make'
3.43 + 3. Perform system checks and create the makefiles.
3.44
3.45 - This command compiles the non-template part of LEMON into libemon.a
3.46 - file. It also compiles the programs in the tools subdirectory by
3.47 - default.
3.48 + $ cmake ..
3.49
3.50 - 4. `make check'
3.51 + 4. Build LEMON.
3.52
3.53 - This step is optional, but recommended. It runs the test programs that
3.54 - we developed for LEMON to check whether the library works properly on
3.55 - your platform.
3.56 + $ make
3.57
3.58 - 5. `make install'
3.59 + This command compiles the non-template part of LEMON into
3.60 + libemon.a file. It also compiles the programs in the 'tools' and
3.61 + 'demo' subdirectories.
3.62 +
3.63 + 5. [Optional] Compile and run the self-tests.
3.64 +
3.65 + $ make check
3.66 +
3.67 + 5. [Optional] Generate the user documentation.
3.68 +
3.69 + $ make html
3.70 +
3.71 + The release tarballs already include the documentation.
3.72 +
3.73 + Note that for this step you need to have the following tools
3.74 + installed: Python, Doxygen, Graphviz, Ghostscript, LaTeX.
3.75 +
3.76 + 6. [Optional] Install LEMON
3.77 +
3.78 + $ make install
3.79
3.80 This command installs LEMON under /usr/local (you will need root
3.81 - privileges to be able to do that). If you want to install it to some
3.82 - other location, then pass the --prefix=DIRECTORY flag to configure in
3.83 - step 2. For example: `./configure --prefix=/home/username/lemon'.
3.84 -
3.85 - 6. `make install-html'
3.86 -
3.87 - This command installs the documentation under share/doc/lemon/docs. The
3.88 - generated documentation is included in the tarball. If you want to
3.89 - generate it yourself, then run `make html'. Note that for this you need
3.90 - to have the following programs installed: Doxygen, Graphviz, Ghostscript,
3.91 - Latex.
3.92 -
3.93 + privileges to be able to do that). If you want to install it to
3.94 + some other location, then pass the
3.95 + -DCMAKE_INSTALL_PREFIX=DIRECTORY flag to cmake in Step 3.
3.96 + For example:
3.97 +
3.98 + $ cmake -DCMAKE_INSTALL_PREFIX=/home/username/lemon'
3.99
3.100 Configure Options and Variables
3.101 ===============================
3.102
3.103 -In step 2 you can customize the actions of configure by setting variables
3.104 -and passing options to it. This can be done like this:
3.105 -`./configure [OPTION]... [VARIABLE=VALUE]...'
3.106 +In Step 3, you can customize the build process by passing options to CMAKE.
3.107
3.108 -Below you will find some useful variables and options (see `./configure --help'
3.109 -for more):
3.110 +$ cmake [OPTIONS] ..
3.111
3.112 -CXX='comp'
3.113 +You find a list of the most useful options below.
3.114
3.115 - Change the C++ compiler to 'comp'.
3.116 -
3.117 -CXXFLAGS='flags'
3.118 -
3.119 - Pass the 'flags' to the compiler. For example CXXFLAGS='-O3 -march=pentium-m'
3.120 - turns on generation of aggressively optimized Pentium-M specific code.
3.121 -
3.122 ---prefix=PREFIX
3.123 +-DCMAKE_INSTALL_PREFIX=PREFIX
3.124
3.125 Set the installation prefix to PREFIX. By default it is /usr/local.
3.126
3.127 ---enable-tools
3.128 +-DCMAKE_BUILD_TYPE=[Release|Debug|Maintainer|...]
3.129
3.130 - Build the programs in the tools subdirectory (default).
3.131 + This sets the compiler options. The choices are the following
3.132
3.133 ---disable-tools
3.134 + 'Release': A strong optimization is turned on (-O3 with gcc). This
3.135 + is the default setting and we strongly recommend using this for
3.136 + the final compilation.
3.137
3.138 - Do not build the programs in the tools subdirectory.
3.139 + 'Debug': Optimization is turned off and debug info is added (-O0
3.140 + -ggdb with gcc). If is recommended during the development.
3.141
3.142 ---with-glpk[=PREFIX]
3.143 + 'Maintainer': The same as 'Debug' but the compiler warnings are
3.144 + converted to errors (-Werror with gcc). In addition, 'make' will
3.145 + also automatically compile and execute the test codes. It is the
3.146 + best way of ensuring that LEMON codebase is clean and safe.
3.147
3.148 - Enable GLPK support (default). You should specify the prefix too if
3.149 - you installed GLPK to some non-standard location (e.g. your home
3.150 - directory). If it is not found, GLPK support will be disabled.
3.151 + 'RelWithDebInfo': Optimized build with debug info.
3.152
3.153 ---with-glpk-includedir=DIR
3.154 + 'MinSizeRel': Size optimized build (-Os with gcc)
3.155
3.156 - The directory where the GLPK header files are located. This is only
3.157 - useful when the GLPK headers and libraries are not under the same
3.158 - prefix (which is unlikely).
3.159 +-DTEST_WITH_VALGRIND=YES
3.160
3.161 ---with-glpk-libdir=DIR
3.162 + Using this, the test codes will be executed using valgrind. It is a
3.163 + very effective way of identifying indexing problems and memory leaks.
3.164
3.165 - The directory where the GLPK libraries are located. This is only
3.166 - useful when the GLPK headers and libraries are not under the same
3.167 - prefix (which is unlikely).
3.168 +-DCMAKE_CXX_COMPILER=path-to-compiler
3.169
3.170 ---without-glpk
3.171 + Change the compiler to be used.
3.172
3.173 - Disable GLPK support.
3.174 +-DBUILD_SHARED_LIBS=TRUE
3.175
3.176 ---with-cplex[=PREFIX]
3.177 + Build shared library instead of static one. Think twice if you
3.178 + really want to use this option.
3.179
3.180 - Enable CPLEX support (default). You should specify the prefix too
3.181 - if you installed CPLEX to some non-standard location
3.182 - (e.g. /opt/ilog/cplex75). If it is not found, CPLEX support will be
3.183 - disabled.
3.184 +-DLEMON_DOC_SOURCE_BROWSER=YES
3.185
3.186 ---with-cplex-includedir=DIR
3.187 + Include the browsable cross referenced LEMON source code into the
3.188 + doc. It makes the doc quite bloated, but may be useful for
3.189 + developing LEMON itself.
3.190
3.191 - The directory where the CPLEX header files are located. This is
3.192 - only useful when the CPLEX headers and libraries are not under the
3.193 - same prefix (e.g. /usr/local/cplex/cplex75/include).
3.194 +-DLEMON_DOC_USE_MATHJAX=YES
3.195
3.196 ---with-cplex-libdir=DIR
3.197 + Use MathJax (http://mathjax.org) for rendering the math formulae in
3.198 + the doc. It of much higher quality compared to the default LaTeX
3.199 + generated static images and it allows copy&paste of the formulae to
3.200 + LaTeX, Open Office, MS Word etc. documents.
3.201
3.202 - The directory where the CPLEX libraries are located. This is only
3.203 - useful when the CPLEX headers and libraries are not under the same
3.204 - prefix (e.g.
3.205 - /usr/local/cplex/cplex75/lib/i86_linux2_glibc2.2_gcc3.0/static_pic_mt).
3.206 + On the other hand, it needs either Internet access or a locally
3.207 + installed version of MathJax to properly render the doc.
3.208
3.209 ---without-cplex
3.210 +-DLEMON_DOC_MATHJAX_RELPATH=DIRECTORY
3.211 +
3.212 + The location of the MathJax library. It defaults to
3.213 + http://www.mathjax.org/mathjax, which necessitates Internet access
3.214 + for proper rendering. The easiest way to make it usable offline is
3.215 + to set this parameter to 'mathjax' and copy all files of the MathJax
3.216 + library into the 'doc/html/mathjax' subdirectory of the build
3.217 + location.
3.218
3.219 - Disable CPLEX support.
3.220 + See http://docs.mathjax.org/en/latest/installation.html for more details.
3.221
3.222 ---with-soplex[=PREFIX]
3.223 +
3.224 +-DLEMON_ENABLE_GLPK=NO
3.225 +-DLEMON_ENABLE_COIN=NO
3.226 +-DLEMON_ENABLE_ILOG=NO
3.227
3.228 - Enable SoPlex support (default). You should specify the prefix too if
3.229 - you installed SoPlex to some non-standard location (e.g. your home
3.230 - directory). If it is not found, SoPlex support will be disabled.
3.231 + Enable optional third party libraries. They are all enabled by default.
3.232
3.233 ---with-soplex-includedir=DIR
3.234 +-DLEMON_DEFAULT_LP=GLPK
3.235
3.236 - The directory where the SoPlex header files are located. This is only
3.237 - useful when the SoPlex headers and libraries are not under the same
3.238 - prefix (which is unlikely).
3.239 + Sets the default LP solver backend. The supported values are
3.240 + CPLEX, CLP and GLPK. By default, it is set to the first one which
3.241 + is enabled and succesfully discovered.
3.242
3.243 ---with-soplex-libdir=DIR
3.244 +-DLEMON_DEFAULT_MIP=GLPK
3.245
3.246 - The directory where the SoPlex libraries are located. This is only
3.247 - useful when the SoPlex headers and libraries are not under the same
3.248 - prefix (which is unlikely).
3.249 + Sets the default MIP solver backend. The supported values are
3.250 + CPLEX, CBC and GLPK. By default, it is set to the first one which
3.251 + is enabled and succesfully discovered.
3.252
3.253 ---without-soplex
3.254 +-DGLPK_ROOT_DIR=DIRECTORY
3.255 +-DCOIN_ROOT_DIR=DIRECTORY
3.256 +-DILOG_ROOT_DIR=DIRECTORY
3.257
3.258 - Disable SoPlex support.
3.259 -
3.260 ---with-coin[=PREFIX]
3.261 -
3.262 - Enable support for COIN-OR solvers (CLP and CBC). You should
3.263 - specify the prefix too. (by default, COIN-OR tools install
3.264 - themselves to the source code directory). This command enables the
3.265 - solvers that are actually found.
3.266 -
3.267 ---with-coin-includedir=DIR
3.268 -
3.269 - The directory where the COIN-OR header files are located. This is
3.270 - only useful when the COIN-OR headers and libraries are not under
3.271 - the same prefix (which is unlikely).
3.272 -
3.273 ---with-coin-libdir=DIR
3.274 -
3.275 - The directory where the COIN-OR libraries are located. This is only
3.276 - useful when the COIN-OR headers and libraries are not under the
3.277 - same prefix (which is unlikely).
3.278 -
3.279 ---without-coin
3.280 -
3.281 - Disable COIN-OR support.
3.282 -
3.283 + Root directory prefixes of optional third party libraries.
3.284
3.285 Makefile Variables
3.286 ==================
3.287
3.288 -Some Makefile variables are reserved by the GNU Coding Standards for
3.289 -the use of the "user" - the person building the package. For instance,
3.290 -CXX and CXXFLAGS are such variables, and have the same meaning as
3.291 -explained in the previous section. These variables can be set on the
3.292 -command line when invoking `make' like this:
3.293 -`make [VARIABLE=VALUE]...'
3.294 +make VERBOSE=1
3.295
3.296 -WARNINGCXXFLAGS is a non-standard Makefile variable introduced by us
3.297 -to hold several compiler flags related to warnings. Its default value
3.298 -can be overridden when invoking `make'. For example to disable all
3.299 -warning flags use `make WARNINGCXXFLAGS='.
3.300 -
3.301 -In order to turn off a single flag from the default set of warning
3.302 -flags, you can use the CXXFLAGS variable, since this is passed after
3.303 -WARNINGCXXFLAGS. For example to turn off `-Wold-style-cast' (which is
3.304 -used by default when g++ is detected) you can use
3.305 -`make CXXFLAGS="-g -O2 -Wno-old-style-cast"'.
3.306 + This results in a more verbose output by showing the full
3.307 + compiler and linker commands.
3.308 \ No newline at end of file
4.1 --- a/LICENSE Mon Jul 16 16:21:40 2018 +0200
4.2 +++ b/LICENSE Wed Oct 17 19:14:07 2018 +0200
4.3 @@ -1,7 +1,7 @@
4.4 LEMON code without an explicit copyright notice is covered by the following
4.5 copyright/license.
4.6
4.7 -Copyright (C) 2003-2010 Egervary Jeno Kombinatorikus Optimalizalasi
4.8 +Copyright (C) 2003-2012 Egervary Jeno Kombinatorikus Optimalizalasi
4.9 Kutatocsoport (Egervary Combinatorial Optimization Research Group,
4.10 EGRES).
4.11
5.1 --- a/Makefile.am Mon Jul 16 16:21:40 2018 +0200
5.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
5.3 @@ -1,80 +0,0 @@
5.4 -ACLOCAL_AMFLAGS = -I m4
5.5 -
5.6 -AM_CXXFLAGS = $(WARNINGCXXFLAGS)
5.7 -
5.8 -AM_CPPFLAGS = -I$(top_srcdir) -I$(top_builddir)
5.9 -LDADD = $(top_builddir)/lemon/libemon.la
5.10 -
5.11 -EXTRA_DIST = \
5.12 - AUTHORS \
5.13 - LICENSE \
5.14 - m4/lx_check_cplex.m4 \
5.15 - m4/lx_check_glpk.m4 \
5.16 - m4/lx_check_soplex.m4 \
5.17 - m4/lx_check_coin.m4 \
5.18 - CMakeLists.txt \
5.19 - cmake/FindGhostscript.cmake \
5.20 - cmake/FindCPLEX.cmake \
5.21 - cmake/FindGLPK.cmake \
5.22 - cmake/FindCOIN.cmake \
5.23 - cmake/LEMONConfig.cmake.in \
5.24 - cmake/version.cmake.in \
5.25 - cmake/version.cmake \
5.26 - cmake/nsis/lemon.ico \
5.27 - cmake/nsis/uninstall.ico
5.28 -
5.29 -pkgconfigdir = $(libdir)/pkgconfig
5.30 -lemondir = $(pkgincludedir)
5.31 -bitsdir = $(lemondir)/bits
5.32 -conceptdir = $(lemondir)/concepts
5.33 -pkgconfig_DATA =
5.34 -lib_LTLIBRARIES =
5.35 -lemon_HEADERS =
5.36 -bits_HEADERS =
5.37 -concept_HEADERS =
5.38 -noinst_HEADERS =
5.39 -noinst_PROGRAMS =
5.40 -bin_PROGRAMS =
5.41 -check_PROGRAMS =
5.42 -dist_bin_SCRIPTS =
5.43 -TESTS =
5.44 -XFAIL_TESTS =
5.45 -
5.46 -include lemon/Makefile.am
5.47 -include test/Makefile.am
5.48 -include doc/Makefile.am
5.49 -include tools/Makefile.am
5.50 -include scripts/Makefile.am
5.51 -
5.52 -DIST_SUBDIRS = demo
5.53 -
5.54 -demo:
5.55 - $(MAKE) $(AM_MAKEFLAGS) -C demo
5.56 -
5.57 -MRPROPERFILES = \
5.58 - aclocal.m4 \
5.59 - config.h.in \
5.60 - config.h.in~ \
5.61 - configure \
5.62 - Makefile.in \
5.63 - build-aux/config.guess \
5.64 - build-aux/config.sub \
5.65 - build-aux/depcomp \
5.66 - build-aux/install-sh \
5.67 - build-aux/ltmain.sh \
5.68 - build-aux/missing \
5.69 - doc/doxygen.log
5.70 -
5.71 -mrproper:
5.72 - $(MAKE) $(AM_MAKEFLAGS) maintainer-clean
5.73 - -rm -f $(MRPROPERFILES)
5.74 -
5.75 -dist-bz2: dist
5.76 - zcat $(PACKAGE)-$(VERSION).tar.gz | \
5.77 - bzip2 --best -c > $(PACKAGE)-$(VERSION).tar.bz2
5.78 -
5.79 -distcheck-bz2: distcheck
5.80 - zcat $(PACKAGE)-$(VERSION).tar.gz | \
5.81 - bzip2 --best -c > $(PACKAGE)-$(VERSION).tar.bz2
5.82 -
5.83 -.PHONY: demo mrproper dist-bz2 distcheck-bz2
6.1 --- a/NEWS Mon Jul 16 16:21:40 2018 +0200
6.2 +++ b/NEWS Wed Oct 17 19:14:07 2018 +0200
6.3 @@ -1,3 +1,101 @@
6.4 +2013-08-10 Version 1.3 released
6.5 +
6.6 + This is major feature release
6.7 +
6.8 + * New data structures
6.9 +
6.10 + #69 : Bipartite graph concepts and implementations
6.11 +
6.12 + * New algorithms
6.13 +
6.14 + #177: Port Edmonds-Karp algorithm
6.15 + #380, #405: Heuristic algorithm for the max clique problem
6.16 + #386: Heuristic algorithms for symmetric TSP
6.17 + ----: Nagamochi-Ibaraki algorithm [5087694945e4]
6.18 + #397, #56: Max. cardinality search
6.19 +
6.20 + * Other new features
6.21 +
6.22 + #223: Thread safe graph and graph map implementations
6.23 + #442: Different TimeStamp print formats
6.24 + #457: File export functionality to LpBase
6.25 + #362: Bidirectional iterator support for radixSort()
6.26 +
6.27 + * Implementation improvements
6.28 +
6.29 + ----: Network Simplex
6.30 + #391: Better update process, pivot rule and arc mixing
6.31 + #435: Improved Altering List pivot rule
6.32 + #417: Various fine tunings in CostScaling
6.33 + #438: Optional iteration limit in HowardMmc
6.34 + #436: Ensure strongly polynomial running time for CycleCanceling
6.35 + while keeping the same performance
6.36 + ----: Make the CBC interface be compatible with latest CBC releases
6.37 + [ee581a0ecfbf]
6.38 +
6.39 + * CMAKE has become the default build environment (#434)
6.40 +
6.41 + ----: Autotool support has been dropped
6.42 + ----: Improved LP/MIP configuration
6.43 + #465: Enable/disable options for LP/MIP backends
6.44 + #446: Better CPLEX discovery
6.45 + #460: Add cmake config to find SoPlex
6.46 + ----: Allow CPACK configuration on all platforms
6.47 + #390: Add 'Maintainer' CMAKE build type
6.48 + #388: Add 'check' target.
6.49 + #401: Add contrib dir
6.50 + #389: Better version string setting in CMAKE
6.51 + #433: Support shared library build
6.52 + #416: Support testing with valgrind
6.53 +
6.54 + * Doc improvements
6.55 +
6.56 + #395: SOURCE_BROWSER Doxygen switch is configurable from CMAKE
6.57 + update-external-tags CMAKE target
6.58 + #455: Optionally use MathJax for rendering the math formulae
6.59 + #402, #437, #459, #456, #463: Various doc improvements
6.60 +
6.61 + * Bugfixes (compared to release 1.2):
6.62 +
6.63 + #432: Add missing doc/template.h and doc/references.bib to release
6.64 + tarball
6.65 + ----: Intel C++ compatibility fixes
6.66 + #441: Fix buggy reinitialization in _solver_bits::VarIndex::clear()
6.67 + #444: Bugfix in path copy constructors and assignment operators
6.68 + #447: Bugfix in AllArcLookUp<>
6.69 + #448: Bugfix in adaptor_test.cc
6.70 + #449: Fix clang compilation warnings and errors
6.71 + #440: Fix a bug + remove redundant typedefs in dimacs-solver
6.72 + #453: Avoid GCC 4.7 compiler warnings
6.73 + #445: Fix missing initialization in CplexEnv::CplexEnv()
6.74 + #428: Add missing lemon/lemon.pc.cmake to the release tarball
6.75 + #393: Create and install lemon.pc
6.76 + #429: Fix VS warnings
6.77 + #430: Fix LpBase::Constr two-side limit bug
6.78 + #392: Bug fix in Dfs::start(s,t)
6.79 + #414: Fix wrong initialization in Preflow
6.80 + #418: Better Win CodeBlock/MinGW support
6.81 + #419: Build environment improvements
6.82 + - Build of mip_test and lp_test precede the running of the tests
6.83 + - Also search for coin libs under ${COIN_ROOT_DIR}/lib/coin
6.84 + - Do not look for COIN_VOL libraries
6.85 + #382: Allow lgf file without Arc maps
6.86 + #417: Bug fix in CostScaling
6.87 + #366: Fix Pred[Matrix]MapPath::empty()
6.88 + #371: Bug fix in (di)graphCopy()
6.89 + The target graph is cleared before adding nodes and arcs/edges.
6.90 + #364: Add missing UndirectedTags
6.91 + #368: Fix the usage of std::numeric_limits<>::min() in Network Simplex
6.92 + #372: Fix a critical bug in preflow
6.93 + #461: Bugfix in assert.h
6.94 + #470: Fix compilation issues related to various gcc versions
6.95 + #446: Fix #define indicating CPLEX availability
6.96 + #294: Add explicit namespace to
6.97 + ignore_unused_variable_warning() usages
6.98 + #420: Bugfix in IterableValueMap
6.99 + #439: Bugfix in biNodeConnected()
6.100 +
6.101 +
6.102 2010-03-19 Version 1.2 released
6.103
6.104 This is major feature release
7.1 --- a/cmake/FindCOIN.cmake Mon Jul 16 16:21:40 2018 +0200
7.2 +++ b/cmake/FindCOIN.cmake Wed Oct 17 19:14:07 2018 +0200
7.3 @@ -65,6 +65,12 @@
7.4 HINTS ${COIN_ROOT_DIR}/lib
7.5 )
7.6
7.7 +FIND_LIBRARY(COIN_PTHREADS_LIBRARY
7.8 + NAMES pthreads libpthreads
7.9 + HINTS ${COIN_ROOT_DIR}/lib/coin
7.10 + HINTS ${COIN_ROOT_DIR}/lib
7.11 +)
7.12 +
7.13 INCLUDE(FindPackageHandleStandardArgs)
7.14 FIND_PACKAGE_HANDLE_STANDARD_ARGS(COIN DEFAULT_MSG
7.15 COIN_INCLUDE_DIR
7.16 @@ -82,14 +88,17 @@
7.17
7.18 IF(COIN_FOUND)
7.19 SET(COIN_INCLUDE_DIRS ${COIN_INCLUDE_DIR})
7.20 - SET(COIN_CLP_LIBRARIES "${COIN_CLP_LIBRARY};${COIN_COIN_UTILS_LIBRARY};${COIN_ZLIB_LIBRARY};${COIN_BZ2_LIBRARY}")
7.21 + SET(COIN_CLP_LIBRARIES "${COIN_CLP_LIBRARY};${COIN_COIN_UTILS_LIBRARY}")
7.22 IF(COIN_ZLIB_LIBRARY)
7.23 SET(COIN_CLP_LIBRARIES "${COIN_CLP_LIBRARIES};${COIN_ZLIB_LIBRARY}")
7.24 ENDIF(COIN_ZLIB_LIBRARY)
7.25 IF(COIN_BZ2_LIBRARY)
7.26 SET(COIN_CLP_LIBRARIES "${COIN_CLP_LIBRARIES};${COIN_BZ2_LIBRARY}")
7.27 ENDIF(COIN_BZ2_LIBRARY)
7.28 - SET(COIN_CBC_LIBRARIES "${COIN_CBC_LIBRARY};${COIN_CBC_SOLVER_LIBRARY};${COIN_CGL_LIBRARY};${COIN_OSI_LIBRARY};${COIN_OSI_CBC_LIBRARY};${COIN_OSI_CLP_LIBRARY};${COIN_ZLIB_LIBRARY};${COIN_BZ2_LIBRARY};${COIN_CLP_LIBRARIES}")
7.29 + IF(COIN_PTHREADS_LIBRARY)
7.30 + SET(COIN_CLP_LIBRARIES "${COIN_CLP_LIBRARIES};${COIN_PTHREADS_LIBRARY}")
7.31 + ENDIF(COIN_PTHREADS_LIBRARY)
7.32 + SET(COIN_CBC_LIBRARIES "${COIN_CBC_LIBRARY};${COIN_CBC_SOLVER_LIBRARY};${COIN_CGL_LIBRARY};${COIN_OSI_LIBRARY};${COIN_OSI_CBC_LIBRARY};${COIN_OSI_CLP_LIBRARY};${COIN_CLP_LIBRARIES}")
7.33 SET(COIN_LIBRARIES ${COIN_CBC_LIBRARIES})
7.34 ENDIF(COIN_FOUND)
7.35
7.36 @@ -108,10 +117,3 @@
7.37 COIN_ZLIB_LIBRARY
7.38 COIN_BZ2_LIBRARY
7.39 )
7.40 -
7.41 -IF(COIN_FOUND)
7.42 - SET(LEMON_HAVE_LP TRUE)
7.43 - SET(LEMON_HAVE_MIP TRUE)
7.44 - SET(LEMON_HAVE_CLP TRUE)
7.45 - SET(LEMON_HAVE_CBC TRUE)
7.46 -ENDIF(COIN_FOUND)
8.1 --- a/cmake/FindCPLEX.cmake Mon Jul 16 16:21:40 2018 +0200
8.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
8.3 @@ -1,40 +0,0 @@
8.4 -SET(CPLEX_ROOT_DIR "" CACHE PATH "CPLEX root directory")
8.5 -
8.6 -FIND_PATH(CPLEX_INCLUDE_DIR
8.7 - ilcplex/cplex.h
8.8 - PATHS "C:/ILOG/CPLEX/include"
8.9 - PATHS "/opt/ilog/cplex/include"
8.10 - HINTS ${CPLEX_ROOT_DIR}/include
8.11 -)
8.12 -FIND_LIBRARY(CPLEX_LIBRARY
8.13 - cplex
8.14 - PATHS "C:/ILOG/CPLEX/lib/msvc7/stat_mda"
8.15 - PATHS "/opt/ilog/cplex/bin"
8.16 - HINTS ${CPLEX_ROOT_DIR}/bin
8.17 - HINTS ${CPLEX_ROOT_DIR}/lib
8.18 -)
8.19 -
8.20 -INCLUDE(FindPackageHandleStandardArgs)
8.21 -FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPLEX DEFAULT_MSG CPLEX_LIBRARY CPLEX_INCLUDE_DIR)
8.22 -
8.23 -FIND_PATH(CPLEX_BIN_DIR
8.24 - cplex.dll
8.25 - PATHS "C:/ILOG/CPLEX/bin/x86_win32"
8.26 - HINTS ${CPLEX_ROOT_DIR}/bin
8.27 -)
8.28 -
8.29 -IF(CPLEX_FOUND)
8.30 - SET(CPLEX_INCLUDE_DIRS ${CPLEX_INCLUDE_DIR})
8.31 - SET(CPLEX_LIBRARIES ${CPLEX_LIBRARY})
8.32 - IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
8.33 - SET(CPLEX_LIBRARIES "${CPLEX_LIBRARIES};m;pthread")
8.34 - ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
8.35 -ENDIF(CPLEX_FOUND)
8.36 -
8.37 -MARK_AS_ADVANCED(CPLEX_LIBRARY CPLEX_INCLUDE_DIR CPLEX_BIN_DIR)
8.38 -
8.39 -IF(CPLEX_FOUND)
8.40 - SET(LEMON_HAVE_LP TRUE)
8.41 - SET(LEMON_HAVE_MIP TRUE)
8.42 - SET(LEMON_HAVE_CPLEX TRUE)
8.43 -ENDIF(CPLEX_FOUND)
9.1 --- a/cmake/FindGLPK.cmake Mon Jul 16 16:21:40 2018 +0200
9.2 +++ b/cmake/FindGLPK.cmake Wed Oct 17 19:14:07 2018 +0200
9.3 @@ -53,9 +53,3 @@
9.4 ENDIF(GLPK_FOUND)
9.5
9.6 MARK_AS_ADVANCED(GLPK_LIBRARY GLPK_INCLUDE_DIR GLPK_BIN_DIR)
9.7 -
9.8 -IF(GLPK_FOUND)
9.9 - SET(LEMON_HAVE_LP TRUE)
9.10 - SET(LEMON_HAVE_MIP TRUE)
9.11 - SET(LEMON_HAVE_GLPK TRUE)
9.12 -ENDIF(GLPK_FOUND)
10.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
10.2 +++ b/cmake/FindILOG.cmake Wed Oct 17 19:14:07 2018 +0200
10.3 @@ -0,0 +1,106 @@
10.4 +FIND_PATH(ILOG_ROOT_DIR
10.5 + NAMES cplex
10.6 + DOC "CPLEX STUDIO root directory"
10.7 + PATHS /opt/ibm/ILOG /usr/local/ibm/ILOG /usr/local/ILOG /usr/local/ilog
10.8 + PATHS "$ENV{HOME}/ILOG" "$ENV{HOME}/.local/ILOG"
10.9 + PATHS "$ENV{HOME}/ibm/ILOG" "$ENV{HOME}/.local/ibm/ILOG"
10.10 + PATHS "C:/Program Files/IBM/ILOG"
10.11 + PATH_SUFFIXES "CPLEX_Studio126" "CPLEX_Studio125"
10.12 + "CPLEX_Studio124" "CPLEX_Studio123" "CPLEX_Studio122"
10.13 + NO_DEFAULT_PATH
10.14 +)
10.15 +
10.16 +IF(WIN32)
10.17 + IF(MSVC_VERSION STREQUAL "1400")
10.18 + SET(ILOG_WIN_COMPILER "windows_vs2005")
10.19 + ELSEIF(MSVC_VERSION STREQUAL "1500")
10.20 + SET(ILOG_WIN_COMPILER "windows_vs2008")
10.21 + ELSEIF(MSVC_VERSION STREQUAL "1600")
10.22 + SET(ILOG_WIN_COMPILER "windows_vs2010")
10.23 + ELSE()
10.24 + SET(ILOG_WIN_COMPILER "windows_vs2008")
10.25 + ENDIF()
10.26 + IF(CMAKE_CL_64)
10.27 + SET(ILOG_WIN_COMPILER "x64_${ILOG_WIN_COMPILER}")
10.28 + SET(ILOG_WIN_PLATFORM "x64_win32")
10.29 + ELSE()
10.30 + SET(ILOG_WIN_COMPILER "x86_${ILOG_WIN_COMPILER}")
10.31 + SET(ILOG_WIN_PLATFORM "x86_win32")
10.32 + ENDIF()
10.33 +ENDIF()
10.34 +
10.35 +FIND_PATH(ILOG_CPLEX_ROOT_DIR
10.36 + NAMES include/ilcplex
10.37 + HINTS ${ILOG_ROOT_DIR}/cplex ${ILOG_ROOT_DIR}/cplex121
10.38 + ${ILOG_ROOT_DIR}/cplex122 ${ILOG_ROOT_DIR}/cplex123
10.39 + DOC "CPLEX root directory"
10.40 + NO_DEFAULT_PATH
10.41 +)
10.42 +
10.43 +FIND_PATH(ILOG_CONCERT_ROOT_DIR
10.44 + NAMES include/ilconcert
10.45 + HINTS ${ILOG_ROOT_DIR}/concert ${ILOG_ROOT_DIR}/concert29
10.46 + DOC "CONCERT root directory"
10.47 + NO_DEFAULT_PATH
10.48 +)
10.49 +
10.50 +FIND_PATH(ILOG_CPLEX_INCLUDE_DIR
10.51 + ilcplex/cplex.h
10.52 + HINTS ${ILOG_CPLEX_ROOT_DIR}/include
10.53 + NO_DEFAULT_PATH
10.54 +)
10.55 +
10.56 +FIND_PATH(ILOG_CONCERT_INCLUDE_DIR
10.57 + ilconcert/ilobasic.h
10.58 + HINTS ${ILOG_CONCERT_ROOT_DIR}/include
10.59 + NO_DEFAULT_PATH
10.60 +)
10.61 +
10.62 +FIND_LIBRARY(ILOG_CPLEX_LIBRARY
10.63 + cplex cplex121 cplex122 cplex123 cplex124
10.64 + HINTS ${ILOG_CPLEX_ROOT_DIR}/lib/x86_sles10_4.1/static_pic
10.65 + ${ILOG_CPLEX_ROOT_DIR}/lib/x86-64_sles10_4.1/static_pic
10.66 + ${ILOG_CPLEX_ROOT_DIR}/lib/x86_debian4.0_4.1/static_pic
10.67 + ${ILOG_CPLEX_ROOT_DIR}/lib/x86-64_debian4.0_4.1/static_pic
10.68 + ${ILOG_CPLEX_ROOT_DIR}/lib/x86_linux/static_pic
10.69 + ${ILOG_CPLEX_ROOT_DIR}/lib/x86-64_linux/static_pic
10.70 + ${ILOG_CPLEX_ROOT_DIR}/lib/${ILOG_WIN_COMPILER}/stat_mda
10.71 + NO_DEFAULT_PATH
10.72 + )
10.73 +
10.74 +FIND_LIBRARY(ILOG_CONCERT_LIBRARY
10.75 + concert
10.76 + HINTS ${ILOG_CONCERT_ROOT_DIR}/lib/x86_sles10_4.1/static_pic
10.77 + ${ILOG_CONCERT_ROOT_DIR}/lib/x86-64_sles10_4.1/static_pic
10.78 + ${ILOG_CONCERT_ROOT_DIR}/lib/x86_debian4.0_4.1/static_pic
10.79 + ${ILOG_CONCERT_ROOT_DIR}/lib/x86-64_debian4.0_4.1/static_pic
10.80 + ${ILOG_CONCERT_ROOT_DIR}/lib/x86_linux/static_pic
10.81 + ${ILOG_CONCERT_ROOT_DIR}/lib/x86-64_linux/static_pic
10.82 + ${ILOG_CONCERT_ROOT_DIR}/lib/${ILOG_WIN_COMPILER}/stat_mda
10.83 + NO_DEFAULT_PATH
10.84 + )
10.85 +
10.86 +FIND_FILE(ILOG_CPLEX_DLL
10.87 + cplex121.dll cplex122.dll cplex123.dll cplex124.dll
10.88 + HINTS ${ILOG_CPLEX_ROOT_DIR}/bin/${ILOG_WIN_PLATFORM}
10.89 + NO_DEFAULT_PATH
10.90 + )
10.91 +
10.92 +INCLUDE(FindPackageHandleStandardArgs)
10.93 +FIND_PACKAGE_HANDLE_STANDARD_ARGS(ILOG
10.94 + DEFAULT_MSG ILOG_CPLEX_LIBRARY ILOG_CPLEX_INCLUDE_DIR
10.95 + )
10.96 +
10.97 +IF(ILOG_FOUND)
10.98 + SET(ILOG_INCLUDE_DIRS ${ILOG_CPLEX_INCLUDE_DIR} ${ILOG_CONCERT_INCLUDE_DIR})
10.99 + SET(ILOG_LIBRARIES ${ILOG_CPLEX_LIBRARY} ${ILOG_CONCERT_LIBRARY})
10.100 + IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
10.101 + # SET(CPLEX_LIBRARIES "${CPLEX_LIBRARIES};m;pthread")
10.102 + SET(ILOG_LIBRARIES ${ILOG_LIBRARIES} "m" "pthread")
10.103 + ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
10.104 +ENDIF(ILOG_FOUND)
10.105 +
10.106 +MARK_AS_ADVANCED(
10.107 + ILOG_CPLEX_LIBRARY ILOG_CPLEX_INCLUDE_DIR ILOG_CPLEX_DLL
10.108 + ILOG_CONCERT_LIBRARY ILOG_CONCERT_INCLUDE_DIR ILOG_CONCERT_DLL
10.109 + )
11.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
11.2 +++ b/cmake/FindSOPLEX.cmake Wed Oct 17 19:14:07 2018 +0200
11.3 @@ -0,0 +1,23 @@
11.4 +SET(SOPLEX_ROOT_DIR "" CACHE PATH "SoPlex root directory")
11.5 +
11.6 +FIND_PATH(SOPLEX_INCLUDE_DIR
11.7 + soplex.h
11.8 + HINTS ${SOPLEX_ROOT_DIR}/src
11.9 +)
11.10 +FIND_LIBRARY(SOPLEX_LIBRARY
11.11 + soplex
11.12 + HINTS ${SOPLEX_ROOT_DIR}/lib
11.13 +)
11.14 +
11.15 +INCLUDE(FindPackageHandleStandardArgs)
11.16 +FIND_PACKAGE_HANDLE_STANDARD_ARGS(SOPLEX DEFAULT_MSG SOPLEX_LIBRARY SOPLEX_INCLUDE_DIR)
11.17 +
11.18 +IF(SOPLEX_FOUND)
11.19 + SET(SOPLEX_INCLUDE_DIRS ${SOPLEX_INCLUDE_DIR})
11.20 + SET(SOPLEX_LIBRARIES ${SOPLEX_LIBRARY})
11.21 + IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
11.22 + SET(SOPLEX_LIBRARIES "${SOPLEX_LIBRARIES};z")
11.23 + ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
11.24 +ENDIF(SOPLEX_FOUND)
11.25 +
11.26 +MARK_AS_ADVANCED(SOPLEX_LIBRARY SOPLEX_INCLUDE_DIR)
12.1 --- a/cmake/version.cmake.in Mon Jul 16 16:21:40 2018 +0200
12.2 +++ b/cmake/version.cmake.in Wed Oct 17 19:14:07 2018 +0200
12.3 @@ -1,1 +1,1 @@
12.4 -SET(LEMON_VERSION "@PACKAGE_VERSION@" CACHE STRING "LEMON version string.")
12.5 +SET(LEMON_VERSION "@LEMON_VERSION@" CACHE STRING "LEMON version string.")
13.1 --- a/configure.ac Mon Jul 16 16:21:40 2018 +0200
13.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
13.3 @@ -1,157 +0,0 @@
13.4 -dnl Process this file with autoconf to produce a configure script.
13.5 -
13.6 -dnl Version information.
13.7 -m4_define([lemon_version_number],
13.8 - [m4_normalize(esyscmd([echo ${LEMON_VERSION}]))])
13.9 -dnl m4_define([lemon_version_number], [])
13.10 -m4_define([lemon_hg_path], [m4_normalize(esyscmd([./scripts/chg-len.py]))])
13.11 -m4_define([lemon_hg_revision], [m4_normalize(esyscmd([hg id -i 2> /dev/null]))])
13.12 -m4_define([lemon_version], [ifelse(lemon_version_number(),
13.13 - [],
13.14 - [ifelse(lemon_hg_revision(),
13.15 - [],
13.16 - [hg-tip],
13.17 - [lemon_hg_path().lemon_hg_revision()])],
13.18 - [lemon_version_number()])])
13.19 -
13.20 -AC_PREREQ([2.59])
13.21 -AC_INIT([LEMON], [lemon_version()], [lemon-user@lemon.cs.elte.hu], [lemon])
13.22 -AC_CONFIG_AUX_DIR([build-aux])
13.23 -AC_CONFIG_MACRO_DIR([m4])
13.24 -AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects nostdinc])
13.25 -AC_CONFIG_SRCDIR([lemon/list_graph.h])
13.26 -AC_CONFIG_HEADERS([config.h lemon/config.h])
13.27 -
13.28 -AC_DEFINE([LEMON_VERSION], [lemon_version()], [The version string])
13.29 -
13.30 -dnl Do compilation tests using the C++ compiler.
13.31 -AC_LANG([C++])
13.32 -
13.33 -dnl Check the existence of long long type.
13.34 -AC_CHECK_TYPE(long long, [long_long_found=yes], [long_long_found=no])
13.35 -if test x"$long_long_found" = x"yes"; then
13.36 - AC_DEFINE([LEMON_HAVE_LONG_LONG], [1], [Define to 1 if you have long long.])
13.37 -fi
13.38 -
13.39 -dnl Checks for programs.
13.40 -AC_PROG_CXX
13.41 -AC_PROG_CXXCPP
13.42 -AC_PROG_INSTALL
13.43 -AC_DISABLE_SHARED
13.44 -AC_PROG_LIBTOOL
13.45 -
13.46 -AC_CHECK_PROG([doxygen_found],[doxygen],[yes],[no])
13.47 -AC_CHECK_PROG([python_found],[python],[yes],[no])
13.48 -AC_CHECK_PROG([gs_found],[gs],[yes],[no])
13.49 -
13.50 -dnl Detect Intel compiler.
13.51 -AC_MSG_CHECKING([whether we are using the Intel C++ compiler])
13.52 -AC_COMPILE_IFELSE([#ifndef __INTEL_COMPILER
13.53 -choke me
13.54 -#endif], [ICC=[yes]], [ICC=[no]])
13.55 -if test x"$ICC" = x"yes"; then
13.56 - AC_MSG_RESULT([yes])
13.57 -else
13.58 - AC_MSG_RESULT([no])
13.59 -fi
13.60 -
13.61 -dnl Set custom compiler flags when using g++.
13.62 -if test "$GXX" = yes -a "$ICC" = no; then
13.63 - WARNINGCXXFLAGS="-Wall -W -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"
13.64 -fi
13.65 -AC_SUBST([WARNINGCXXFLAGS])
13.66 -
13.67 -dnl Checks for libraries.
13.68 -LX_CHECK_GLPK
13.69 -LX_CHECK_CPLEX
13.70 -LX_CHECK_SOPLEX
13.71 -LX_CHECK_COIN
13.72 -
13.73 -AM_CONDITIONAL([HAVE_LP], [test x"$lx_lp_found" = x"yes"])
13.74 -AM_CONDITIONAL([HAVE_MIP], [test x"$lx_mip_found" = x"yes"])
13.75 -
13.76 -dnl Disable/enable building the binary tools.
13.77 -AC_ARG_ENABLE([tools],
13.78 -AS_HELP_STRING([--enable-tools], [build additional tools @<:@default@:>@])
13.79 -AS_HELP_STRING([--disable-tools], [do not build additional tools]),
13.80 - [], [enable_tools=yes])
13.81 -AC_MSG_CHECKING([whether to build the additional tools])
13.82 -if test x"$enable_tools" != x"no"; then
13.83 - AC_MSG_RESULT([yes])
13.84 -else
13.85 - AC_MSG_RESULT([no])
13.86 -fi
13.87 -AM_CONDITIONAL([WANT_TOOLS], [test x"$enable_tools" != x"no"])
13.88 -
13.89 -dnl Support for running test cases using valgrind.
13.90 -use_valgrind=no
13.91 -AC_ARG_ENABLE([valgrind],
13.92 -AS_HELP_STRING([--enable-valgrind], [use valgrind when running tests]),
13.93 - [use_valgrind=yes])
13.94 -
13.95 -if [[ "$use_valgrind" = "yes" ]]; then
13.96 - AC_CHECK_PROG(HAVE_VALGRIND, valgrind, yes, no)
13.97 -
13.98 - if [[ "$HAVE_VALGRIND" = "no" ]]; then
13.99 - AC_MSG_ERROR([Valgrind not found in PATH.])
13.100 - fi
13.101 -fi
13.102 -AM_CONDITIONAL(USE_VALGRIND, [test "$use_valgrind" = "yes"])
13.103 -
13.104 -dnl Checks for header files.
13.105 -AC_CHECK_HEADERS(limits.h sys/time.h sys/times.h unistd.h)
13.106 -
13.107 -dnl Checks for typedefs, structures, and compiler characteristics.
13.108 -AC_C_CONST
13.109 -AC_C_INLINE
13.110 -AC_TYPE_SIZE_T
13.111 -AC_HEADER_TIME
13.112 -AC_STRUCT_TM
13.113 -
13.114 -dnl Checks for library functions.
13.115 -AC_HEADER_STDC
13.116 -AC_CHECK_FUNCS(gettimeofday times ctime_r)
13.117 -
13.118 -dnl Add dependencies on files generated by configure.
13.119 -AC_SUBST([CONFIG_STATUS_DEPENDENCIES],
13.120 - ['$(top_srcdir)/doc/Doxyfile.in $(top_srcdir)/doc/mainpage.dox.in $(top_srcdir)/lemon/lemon.pc.in $(top_srcdir)/cmake/version.cmake.in'])
13.121 -
13.122 -AC_CONFIG_FILES([
13.123 -Makefile
13.124 -demo/Makefile
13.125 -cmake/version.cmake
13.126 -doc/Doxyfile
13.127 -doc/mainpage.dox
13.128 -lemon/lemon.pc
13.129 -])
13.130 -
13.131 -AC_OUTPUT
13.132 -
13.133 -echo
13.134 -echo '****************************** SUMMARY ******************************'
13.135 -echo
13.136 -echo Package version............... : $PACKAGE-$VERSION
13.137 -echo
13.138 -echo C++ compiler.................. : $CXX
13.139 -echo C++ compiles flags............ : $WARNINGCXXFLAGS $CXXFLAGS
13.140 -echo
13.141 -echo Compiler supports long long... : $long_long_found
13.142 -echo
13.143 -echo GLPK support.................. : $lx_glpk_found
13.144 -echo CPLEX support................. : $lx_cplex_found
13.145 -echo SOPLEX support................ : $lx_soplex_found
13.146 -echo CLP support................... : $lx_clp_found
13.147 -echo CBC support................... : $lx_cbc_found
13.148 -echo
13.149 -echo Build additional tools........ : $enable_tools
13.150 -echo Use valgrind for tests........ : $use_valgrind
13.151 -echo
13.152 -echo The packace will be installed in
13.153 -echo -n ' '
13.154 -echo $prefix.
13.155 -echo
13.156 -echo '*********************************************************************'
13.157 -
13.158 -echo
13.159 -echo Configure complete, now type \'make\' and then \'make install\'.
13.160 -echo
14.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
14.2 +++ b/contrib/CMakeLists.txt Wed Oct 17 19:14:07 2018 +0200
14.3 @@ -0,0 +1,19 @@
14.4 +INCLUDE_DIRECTORIES(
14.5 + ${PROJECT_SOURCE_DIR}
14.6 + ${PROJECT_BINARY_DIR}
14.7 +)
14.8 +
14.9 +LINK_DIRECTORIES(
14.10 + ${PROJECT_BINARY_DIR}/lemon
14.11 +)
14.12 +
14.13 +# Uncomment (and adjust) the following two lines. 'myprog' is the name
14.14 +# of the final executable ('.exe' will automatically be added to the
14.15 +# name on Windows) and 'myprog-main.cc' is the source code it is
14.16 +# compiled from. You can add more source files separated by
14.17 +# whitespaces. Moreover, you can add multiple similar blocks if you
14.18 +# want to build more than one executables.
14.19 +
14.20 +# ADD_EXECUTABLE(myprog myprog-main.cc)
14.21 +# TARGET_LINK_LIBRARIES(myprog lemon)
14.22 +
15.1 --- a/demo/Makefile.am Mon Jul 16 16:21:40 2018 +0200
15.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
15.3 @@ -1,17 +0,0 @@
15.4 -AM_CXXFLAGS = $(WARNINGCXXFLAGS)
15.5 -
15.6 -AM_CPPFLAGS = -I$(top_srcdir) -I$(top_builddir)
15.7 -LDADD = $(top_builddir)/lemon/libemon.la
15.8 -
15.9 -EXTRA_DIST = \
15.10 - CMakeLists.txt \
15.11 - digraph.lgf
15.12 -
15.13 -noinst_PROGRAMS = \
15.14 - arg_parser_demo \
15.15 - graph_to_eps_demo \
15.16 - lgf_demo
15.17 -
15.18 -arg_parser_demo_SOURCES = arg_parser_demo.cc
15.19 -graph_to_eps_demo_SOURCES = graph_to_eps_demo.cc
15.20 -lgf_demo_SOURCES = lgf_demo.cc
16.1 --- a/doc/CMakeLists.txt Mon Jul 16 16:21:40 2018 +0200
16.2 +++ b/doc/CMakeLists.txt Wed Oct 17 19:14:07 2018 +0200
16.3 @@ -4,6 +4,13 @@
16.4 SET(abs_top_builddir ${PROJECT_BINARY_DIR})
16.5
16.6 SET(LEMON_DOC_SOURCE_BROWSER "NO" CACHE STRING "Include source into the doc (YES/NO).")
16.7 +SET(LEMON_DOC_USE_MATHJAX "NO" CACHE STRING "Use MathJax to display math formulae (YES/NO).")
16.8 +SET(LEMON_DOC_MATHJAX_RELPATH "http://www.mathjax.org/mathjax" CACHE STRING "MathJax library location.")
16.9 +
16.10 +SET(LEMON_DOC_LIBSTDC++_URL
16.11 + "http://gcc.gnu.org/onlinedocs/gcc-4.7.3/libstdc++/api"
16.12 + CACHE STRING "GCC libstdc++ doxygen doc url.")
16.13 +
16.14
16.15 CONFIGURE_FILE(
16.16 ${PROJECT_SOURCE_DIR}/doc/Doxyfile.in
16.17 @@ -17,28 +24,38 @@
16.18 @ONLY
16.19 )
16.20
16.21 +# Copy doc from source (if exists)
16.22 +IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/html AND
16.23 + NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/html/index.html)
16.24 + MESSAGE(STATUS "Copy doc from source tree")
16.25 + EXECUTE_PROCESS(
16.26 + COMMAND cmake -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/html ${CMAKE_CURRENT_BINARY_DIR}/html
16.27 + )
16.28 +ENDIF()
16.29 +
16.30 IF(DOXYGEN_EXECUTABLE AND PYTHONINTERP_FOUND AND GHOSTSCRIPT_EXECUTABLE)
16.31 FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html/)
16.32 SET(GHOSTSCRIPT_OPTIONS -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha)
16.33 ADD_CUSTOM_TARGET(html
16.34 COMMAND ${CMAKE_COMMAND} -E remove_directory gen-images
16.35 COMMAND ${CMAKE_COMMAND} -E make_directory gen-images
16.36 - COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r18 -sOutputFile=gen-images/bipartite_matching.png ${CMAKE_CURRENT_SOURCE_DIR}/images/bipartite_matching.eps
16.37 - COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r18 -sOutputFile=gen-images/bipartite_partitions.png ${CMAKE_CURRENT_SOURCE_DIR}/images/bipartite_partitions.eps
16.38 - COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r18 -sOutputFile=gen-images/connected_components.png ${CMAKE_CURRENT_SOURCE_DIR}/images/connected_components.eps
16.39 - COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r18 -sOutputFile=gen-images/edge_biconnected_components.png ${CMAKE_CURRENT_SOURCE_DIR}/images/edge_biconnected_components.eps
16.40 - COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r18 -sOutputFile=gen-images/grid_graph.png ${CMAKE_CURRENT_SOURCE_DIR}/images/grid_graph.eps
16.41 - COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r18 -sOutputFile=gen-images/matching.png ${CMAKE_CURRENT_SOURCE_DIR}/images/matching.eps
16.42 - COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r18 -sOutputFile=gen-images/node_biconnected_components.png ${CMAKE_CURRENT_SOURCE_DIR}/images/node_biconnected_components.eps
16.43 - COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r18 -sOutputFile=gen-images/nodeshape_0.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_0.eps
16.44 - COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r18 -sOutputFile=gen-images/nodeshape_1.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_1.eps
16.45 - COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r18 -sOutputFile=gen-images/nodeshape_2.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_2.eps
16.46 - COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r18 -sOutputFile=gen-images/nodeshape_3.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_3.eps
16.47 - COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r18 -sOutputFile=gen-images/nodeshape_4.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_4.eps
16.48 - COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r18 -sOutputFile=gen-images/planar.png ${CMAKE_CURRENT_SOURCE_DIR}/images/planar.eps
16.49 - COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r18 -sOutputFile=gen-images/strongly_connected_components.png ${CMAKE_CURRENT_SOURCE_DIR}/images/strongly_connected_components.eps
16.50 + COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r20 -sOutputFile=gen-images/grid_graph.png ${CMAKE_CURRENT_SOURCE_DIR}/images/grid_graph.eps
16.51 + COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r32 -sOutputFile=gen-images/adaptors2.png ${CMAKE_CURRENT_SOURCE_DIR}/images/adaptors2.eps
16.52 + COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r32 -sOutputFile=gen-images/connected_components.png ${CMAKE_CURRENT_SOURCE_DIR}/images/connected_components.eps
16.53 + COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r32 -sOutputFile=gen-images/strongly_connected_components.png ${CMAKE_CURRENT_SOURCE_DIR}/images/strongly_connected_components.eps
16.54 + COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r32 -sOutputFile=gen-images/node_biconnected_components.png ${CMAKE_CURRENT_SOURCE_DIR}/images/node_biconnected_components.eps
16.55 + COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r32 -sOutputFile=gen-images/edge_biconnected_components.png ${CMAKE_CURRENT_SOURCE_DIR}/images/edge_biconnected_components.eps
16.56 + COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r32 -sOutputFile=gen-images/bipartite_partitions.png ${CMAKE_CURRENT_SOURCE_DIR}/images/bipartite_partitions.eps
16.57 + COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r24 -sOutputFile=gen-images/matching.png ${CMAKE_CURRENT_SOURCE_DIR}/images/matching.eps
16.58 + COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r24 -sOutputFile=gen-images/bipartite_matching.png ${CMAKE_CURRENT_SOURCE_DIR}/images/bipartite_matching.eps
16.59 + COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r40 -sOutputFile=gen-images/planar.png ${CMAKE_CURRENT_SOURCE_DIR}/images/planar.eps
16.60 + COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r24 -sOutputFile=gen-images/tsp.png ${CMAKE_CURRENT_SOURCE_DIR}/images/tsp.eps
16.61 + COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r8 -sOutputFile=gen-images/nodeshape_0.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_0.eps
16.62 + COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r8 -sOutputFile=gen-images/nodeshape_1.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_1.eps
16.63 + COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r8 -sOutputFile=gen-images/nodeshape_2.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_2.eps
16.64 + COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r8 -sOutputFile=gen-images/nodeshape_3.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_3.eps
16.65 + COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r8 -sOutputFile=gen-images/nodeshape_4.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_4.eps
16.66 COMMAND ${CMAKE_COMMAND} -E remove_directory html
16.67 - COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/scripts/bib2dox.py ${CMAKE_CURRENT_SOURCE_DIR}/references.bib >references.dox
16.68 COMMAND ${DOXYGEN_EXECUTABLE} Doxyfile
16.69 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
16.70 )
16.71 @@ -63,12 +80,7 @@
16.72
16.73 IF(WGET_FOUND)
16.74 ADD_CUSTOM_TARGET(update-external-tags
16.75 - COMMAND ${CMAKE_COMMAND} -E make_directory dl
16.76 - # COMMAND ${CMAKE_COMMAND} -E copy libstdc++.tag dl
16.77 - COMMAND ${WGET_EXECUTABLE} wget -P dl -N libstdc++.tag.tmp http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/libstdc++.tag
16.78 - COMMAND ${CMAKE_COMMAND} -E rename dl/libstdc++.tag libstdc++.tag
16.79 - COMMAND ${CMAKE_COMMAND} -E remove dl/libstdc++.tag
16.80 - COMMAND ${CMAKE_COMMAND} -E remove_directory dl
16.81 + COMMAND ${WGET_EXECUTABLE} -N ${LEMON_DOC_LIBSTDC++_URL}/libstdc++.tag
16.82 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
16.83 )
16.84 ENDIF()
17.1 --- a/doc/Doxyfile.in Mon Jul 16 16:21:40 2018 +0200
17.2 +++ b/doc/Doxyfile.in Wed Oct 17 19:14:07 2018 +0200
17.3 @@ -77,6 +77,7 @@
17.4 SHOW_NAMESPACES = YES
17.5 FILE_VERSION_FILTER =
17.6 LAYOUT_FILE = "@abs_top_srcdir@/doc/DoxygenLayout.xml"
17.7 +CITE_BIB_FILES = "@abs_top_srcdir@/doc/references.bib"
17.8 #---------------------------------------------------------------------------
17.9 # configuration options related to warning and progress messages
17.10 #---------------------------------------------------------------------------
17.11 @@ -95,10 +96,10 @@
17.12 "@abs_top_srcdir@/lemon/bits" \
17.13 "@abs_top_srcdir@/lemon/concepts" \
17.14 "@abs_top_srcdir@/demo" \
17.15 + "@abs_top_srcdir@/contrib" \
17.16 "@abs_top_srcdir@/tools" \
17.17 "@abs_top_srcdir@/test/test_tools.h" \
17.18 - "@abs_top_builddir@/doc/mainpage.dox" \
17.19 - "@abs_top_builddir@/doc/references.dox"
17.20 + "@abs_top_builddir@/doc/mainpage.dox"
17.21 INPUT_ENCODING = UTF-8
17.22 FILE_PATTERNS = *.h \
17.23 *.cc \
17.24 @@ -181,8 +182,8 @@
17.25 EXT_LINKS_IN_WINDOW = NO
17.26 FORMULA_FONTSIZE = 10
17.27 FORMULA_TRANSPARENT = YES
17.28 -USE_MATHJAX = NO
17.29 -MATHJAX_RELPATH = http://www.mathjax.org/mathjax
17.30 +USE_MATHJAX = @LEMON_DOC_USE_MATHJAX@
17.31 +MATHJAX_RELPATH = @LEMON_DOC_MATHJAX_RELPATH@
17.32 SEARCHENGINE = YES
17.33 SERVER_BASED_SEARCH = NO
17.34 #---------------------------------------------------------------------------
17.35 @@ -252,7 +253,7 @@
17.36 #---------------------------------------------------------------------------
17.37 # Configuration::additions related to external references
17.38 #---------------------------------------------------------------------------
17.39 -TAGFILES = "@abs_top_builddir@/doc/libstdc++.tag = http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/ "
17.40 +TAGFILES = "@abs_top_builddir@/doc/libstdc++.tag = @LEMON_DOC_LIBSTDC++_URL@"
17.41 GENERATE_TAGFILE = html/lemon.tag
17.42 ALLEXTERNALS = NO
17.43 EXTERNAL_GROUPS = NO
18.1 --- a/doc/DoxygenLayout.xml Mon Jul 16 16:21:40 2018 +0200
18.2 +++ b/doc/DoxygenLayout.xml Wed Oct 17 19:14:07 2018 +0200
18.3 @@ -17,7 +17,6 @@
18.4 <tab type="files" visible="yes" title="" intro=""/>
18.5 <tab type="globals" visible="yes" title="" intro=""/>
18.6 </tab>
18.7 - <tab type="dirs" visible="yes" title="" intro=""/>
18.8 <tab type="examples" visible="yes" title="" intro=""/>
18.9 <tab type="pages" visible="yes" title="" intro=""/>
18.10 </navindex>
19.1 --- a/doc/Makefile.am Mon Jul 16 16:21:40 2018 +0200
19.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
19.3 @@ -1,125 +0,0 @@
19.4 -EXTRA_DIST += \
19.5 - doc/Doxyfile.in \
19.6 - doc/DoxygenLayout.xml \
19.7 - doc/coding_style.dox \
19.8 - doc/dirs.dox \
19.9 - doc/groups.dox \
19.10 - doc/lgf.dox \
19.11 - doc/license.dox \
19.12 - doc/mainpage.dox \
19.13 - doc/migration.dox \
19.14 - doc/min_cost_flow.dox \
19.15 - doc/named-param.dox \
19.16 - doc/namespaces.dox \
19.17 - doc/references.bib \
19.18 - doc/template.h \
19.19 - doc/html \
19.20 - doc/CMakeLists.txt
19.21 -
19.22 -DOC_EPS_IMAGES18 = \
19.23 - grid_graph.eps \
19.24 - nodeshape_0.eps \
19.25 - nodeshape_1.eps \
19.26 - nodeshape_2.eps \
19.27 - nodeshape_3.eps \
19.28 - nodeshape_4.eps
19.29 -
19.30 -DOC_EPS_IMAGES27 = \
19.31 - bipartite_matching.eps \
19.32 - bipartite_partitions.eps \
19.33 - connected_components.eps \
19.34 - edge_biconnected_components.eps \
19.35 - matching.eps \
19.36 - node_biconnected_components.eps \
19.37 - planar.eps \
19.38 - strongly_connected_components.eps
19.39 -
19.40 -DOC_EPS_IMAGES = \
19.41 - $(DOC_EPS_IMAGES18) \
19.42 - $(DOC_EPS_IMAGES27)
19.43 -
19.44 -DOC_PNG_IMAGES = \
19.45 - $(DOC_EPS_IMAGES:%.eps=doc/gen-images/%.png)
19.46 -
19.47 -EXTRA_DIST += $(DOC_EPS_IMAGES:%=doc/images/%)
19.48 -
19.49 -doc/html:
19.50 - $(MAKE) $(AM_MAKEFLAGS) html
19.51 -
19.52 -GS_COMMAND=gs -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4
19.53 -
19.54 -$(DOC_EPS_IMAGES18:%.eps=doc/gen-images/%.png): doc/gen-images/%.png: doc/images/%.eps
19.55 - -mkdir doc/gen-images
19.56 - if test ${gs_found} = yes; then \
19.57 - $(GS_COMMAND) -sDEVICE=pngalpha -r18 -sOutputFile=$@ $<; \
19.58 - else \
19.59 - echo; \
19.60 - echo "Ghostscript not found."; \
19.61 - echo; \
19.62 - exit 1; \
19.63 - fi
19.64 -
19.65 -$(DOC_EPS_IMAGES27:%.eps=doc/gen-images/%.png): doc/gen-images/%.png: doc/images/%.eps
19.66 - -mkdir doc/gen-images
19.67 - if test ${gs_found} = yes; then \
19.68 - $(GS_COMMAND) -sDEVICE=pngalpha -r27 -sOutputFile=$@ $<; \
19.69 - else \
19.70 - echo; \
19.71 - echo "Ghostscript not found."; \
19.72 - echo; \
19.73 - exit 1; \
19.74 - fi
19.75 -
19.76 -references.dox: doc/references.bib
19.77 - if test ${python_found} = yes; then \
19.78 - cd doc; \
19.79 - python @abs_top_srcdir@/scripts/bib2dox.py @abs_top_builddir@/$< >$@; \
19.80 - cd ..; \
19.81 - else \
19.82 - echo; \
19.83 - echo "Python not found."; \
19.84 - echo; \
19.85 - exit 1; \
19.86 - fi
19.87 -
19.88 -html-local: $(DOC_PNG_IMAGES) references.dox
19.89 - if test ${doxygen_found} = yes; then \
19.90 - cd doc; \
19.91 - doxygen Doxyfile; \
19.92 - cd ..; \
19.93 - else \
19.94 - echo; \
19.95 - echo "Doxygen not found."; \
19.96 - echo; \
19.97 - exit 1; \
19.98 - fi
19.99 -
19.100 -clean-local:
19.101 - -rm -rf doc/html
19.102 - -rm -f doc/doxygen.log
19.103 - -rm -f $(DOC_PNG_IMAGES)
19.104 - -rm -rf doc/gen-images
19.105 -
19.106 -update-external-tags:
19.107 - wget -O doc/libstdc++.tag.tmp http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/libstdc++.tag && \
19.108 - mv doc/libstdc++.tag.tmp doc/libstdc++.tag || \
19.109 - rm doc/libstdc++.tag.tmp
19.110 -
19.111 -install-html-local: doc/html
19.112 - @$(NORMAL_INSTALL)
19.113 - $(mkinstalldirs) $(DESTDIR)$(htmldir)/html
19.114 - for p in doc/html/*.{html,css,png,map,gif,tag} ; do \
19.115 - f="`echo $$p | sed -e 's|^.*/||'`"; \
19.116 - echo " $(INSTALL_DATA) $$p $(DESTDIR)$(htmldir)/html/$$f"; \
19.117 - $(INSTALL_DATA) $$p $(DESTDIR)$(htmldir)/html/$$f; \
19.118 - done
19.119 -
19.120 -uninstall-local:
19.121 - @$(NORMAL_UNINSTALL)
19.122 - for p in doc/html/*.{html,css,png,map,gif,tag} ; do \
19.123 - f="`echo $$p | sed -e 's|^.*/||'`"; \
19.124 - echo " rm -f $(DESTDIR)$(htmldir)/html/$$f"; \
19.125 - rm -f $(DESTDIR)$(htmldir)/html/$$f; \
19.126 - done
19.127 -
19.128 -.PHONY: update-external-tags
20.1 --- a/doc/coding_style.dox Mon Jul 16 16:21:40 2018 +0200
20.2 +++ b/doc/coding_style.dox Wed Oct 17 19:14:07 2018 +0200
20.3 @@ -2,7 +2,7 @@
20.4 *
20.5 * This file is a part of LEMON, a generic C++ optimization library.
20.6 *
20.7 - * Copyright (C) 2003-2009
20.8 + * Copyright (C) 2003-2013
20.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
20.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
20.11 *
20.12 @@ -98,10 +98,10 @@
20.13
20.14 \subsection pri-loc-var Private member variables
20.15
20.16 -Private member variables should start with underscore
20.17 +Private member variables should start with underscore.
20.18
20.19 \code
20.20 -_start_with_underscores
20.21 +_start_with_underscore
20.22 \endcode
20.23
20.24 \subsection cs-excep Exceptions
21.1 --- a/doc/dirs.dox Mon Jul 16 16:21:40 2018 +0200
21.2 +++ b/doc/dirs.dox Wed Oct 17 19:14:07 2018 +0200
21.3 @@ -2,7 +2,7 @@
21.4 *
21.5 * This file is a part of LEMON, a generic C++ optimization library.
21.6 *
21.7 - * Copyright (C) 2003-2009
21.8 + * Copyright (C) 2003-2013
21.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
21.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
21.11 *
21.12 @@ -33,6 +33,19 @@
21.13 */
21.14
21.15 /**
21.16 +\dir contrib
21.17 +\brief Directory for user contributed source codes.
21.18 +
21.19 +You can place your own C++ code using LEMON into this directory, which
21.20 +will compile to an executable along with LEMON when you build the
21.21 +library. This is probably the easiest way of compiling short to medium
21.22 +codes, for this does require neither a LEMON installed system-wide nor
21.23 +adding several paths to the compiler.
21.24 +
21.25 +Please have a look at <tt>contrib/CMakeLists.txt</tt> for
21.26 +instruction on how to add your own files into the build process. */
21.27 +
21.28 +/**
21.29 \dir test
21.30 \brief Test programs.
21.31
22.1 --- a/doc/groups.dox Mon Jul 16 16:21:40 2018 +0200
22.2 +++ b/doc/groups.dox Wed Oct 17 19:14:07 2018 +0200
22.3 @@ -2,7 +2,7 @@
22.4 *
22.5 * This file is a part of LEMON, a generic C++ optimization library.
22.6 *
22.7 - * Copyright (C) 2003-2010
22.8 + * Copyright (C) 2003-2013
22.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
22.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
22.11 *
22.12 @@ -112,6 +112,14 @@
22.13 obtained. For other examples, the interested user is referred to the
22.14 detailed documentation of particular adaptors.
22.15
22.16 +Since the adaptor classes conform to the \ref graph_concepts "graph concepts",
22.17 +an adaptor can even be applied to another one.
22.18 +The following image illustrates a situation when a \ref SubDigraph adaptor
22.19 +is applied on a digraph and \ref Undirector is applied on the subgraph.
22.20 +
22.21 +\image html adaptors2.png
22.22 +\image latex adaptors2.eps "Using graph adaptors" width=\textwidth
22.23 +
22.24 The behavior of graph adaptors can be very different. Some of them keep
22.25 capabilities of the original graph while in other cases this would be
22.26 meaningless. This means that the concepts that they meet depend
22.27 @@ -309,7 +317,7 @@
22.28
22.29 This group contains the common graph search algorithms, namely
22.30 \e breadth-first \e search (BFS) and \e depth-first \e search (DFS)
22.31 -\ref clrs01algorithms.
22.32 +\cite clrs01algorithms.
22.33 */
22.34
22.35 /**
22.36 @@ -318,7 +326,7 @@
22.37 \brief Algorithms for finding shortest paths.
22.38
22.39 This group contains the algorithms for finding shortest paths in digraphs
22.40 -\ref clrs01algorithms.
22.41 +\cite clrs01algorithms.
22.42
22.43 - \ref Dijkstra algorithm for finding shortest paths from a source node
22.44 when all arc lengths are non-negative.
22.45 @@ -340,7 +348,7 @@
22.46 \brief Algorithms for finding minimum cost spanning trees and arborescences.
22.47
22.48 This group contains the algorithms for finding minimum cost spanning
22.49 -trees and arborescences \ref clrs01algorithms.
22.50 +trees and arborescences \cite clrs01algorithms.
22.51 */
22.52
22.53 /**
22.54 @@ -349,7 +357,7 @@
22.55 \brief Algorithms for finding maximum flows.
22.56
22.57 This group contains the algorithms for finding maximum flows and
22.58 -feasible circulations \ref clrs01algorithms, \ref amo93networkflows.
22.59 +feasible circulations \cite clrs01algorithms, \cite amo93networkflows.
22.60
22.61 The \e maximum \e flow \e problem is to find a flow of maximum value between
22.62 a single source and a single target. Formally, there is a \f$G=(V,A)\f$
22.63 @@ -365,13 +373,13 @@
22.64
22.65 LEMON contains several algorithms for solving maximum flow problems:
22.66 - \ref EdmondsKarp Edmonds-Karp algorithm
22.67 - \ref edmondskarp72theoretical.
22.68 + \cite edmondskarp72theoretical.
22.69 - \ref Preflow Goldberg-Tarjan's preflow push-relabel algorithm
22.70 - \ref goldberg88newapproach.
22.71 + \cite goldberg88newapproach.
22.72 - \ref DinitzSleatorTarjan Dinitz's blocking flow algorithm with dynamic trees
22.73 - \ref dinic70algorithm, \ref sleator83dynamic.
22.74 + \cite dinic70algorithm, \cite sleator83dynamic.
22.75 - \ref GoldbergTarjan !Preflow push-relabel algorithm with dynamic trees
22.76 - \ref goldberg88newapproach, \ref sleator83dynamic.
22.77 + \cite goldberg88newapproach, \cite sleator83dynamic.
22.78
22.79 In most cases the \ref Preflow algorithm provides the
22.80 fastest method for computing a maximum flow. All implementations
22.81 @@ -391,25 +399,41 @@
22.82 \brief Algorithms for finding minimum cost flows and circulations.
22.83
22.84 This group contains the algorithms for finding minimum cost flows and
22.85 -circulations \ref amo93networkflows. For more information about this
22.86 -problem and its dual solution, see \ref min_cost_flow
22.87 +circulations \cite amo93networkflows. For more information about this
22.88 +problem and its dual solution, see: \ref min_cost_flow
22.89 "Minimum Cost Flow Problem".
22.90
22.91 LEMON contains several algorithms for this problem.
22.92 - \ref NetworkSimplex Primal Network Simplex algorithm with various
22.93 - pivot strategies \ref dantzig63linearprog, \ref kellyoneill91netsimplex.
22.94 + pivot strategies \cite dantzig63linearprog, \cite kellyoneill91netsimplex.
22.95 - \ref CostScaling Cost Scaling algorithm based on push/augment and
22.96 - relabel operations \ref goldberg90approximation, \ref goldberg97efficient,
22.97 - \ref bunnagel98efficient.
22.98 + relabel operations \cite goldberg90approximation, \cite goldberg97efficient,
22.99 + \cite bunnagel98efficient.
22.100 - \ref CapacityScaling Capacity Scaling algorithm based on the successive
22.101 - shortest path method \ref edmondskarp72theoretical.
22.102 + shortest path method \cite edmondskarp72theoretical.
22.103 - \ref CycleCanceling Cycle-Canceling algorithms, two of which are
22.104 - strongly polynomial \ref klein67primal, \ref goldberg89cyclecanceling.
22.105 + strongly polynomial \cite klein67primal, \cite goldberg89cyclecanceling.
22.106
22.107 -In general NetworkSimplex is the most efficient implementation,
22.108 -but in special cases other algorithms could be faster.
22.109 +In general, \ref NetworkSimplex and \ref CostScaling are the most efficient
22.110 +implementations.
22.111 +\ref NetworkSimplex is usually the fastest on relatively small graphs (up to
22.112 +several thousands of nodes) and on dense graphs, while \ref CostScaling is
22.113 +typically more efficient on large graphs (e.g. hundreds of thousands of
22.114 +nodes or above), especially if they are sparse.
22.115 +However, other algorithms could be faster in special cases.
22.116 For example, if the total supply and/or capacities are rather small,
22.117 -CapacityScaling is usually the fastest algorithm (without effective scaling).
22.118 +\ref CapacityScaling is usually the fastest algorithm
22.119 +(without effective scaling).
22.120 +
22.121 +These classes are intended to be used with integer-valued input data
22.122 +(capacities, supply values, and costs), except for \ref CapacityScaling,
22.123 +which is capable of handling real-valued arc costs (other numerical
22.124 +data are required to be integer).
22.125 +
22.126 +For more details about these implementations and for a comprehensive
22.127 +experimental study, see the paper \cite KiralyKovacs12MCF.
22.128 +It also compares these codes to other publicly available
22.129 +minimum cost flow solvers.
22.130 */
22.131
22.132 /**
22.133 @@ -448,7 +472,7 @@
22.134 \brief Algorithms for finding minimum mean cycles.
22.135
22.136 This group contains the algorithms for finding minimum mean cycles
22.137 -\ref clrs01algorithms, \ref amo93networkflows.
22.138 +\cite amo93networkflows, \cite karp78characterization.
22.139
22.140 The \e minimum \e mean \e cycle \e problem is to find a directed cycle
22.141 of minimum mean length (cost) in a digraph.
22.142 @@ -464,19 +488,17 @@
22.143 function.
22.144
22.145 LEMON contains three algorithms for solving the minimum mean cycle problem:
22.146 -- \ref KarpMmc Karp's original algorithm \ref amo93networkflows,
22.147 - \ref dasdan98minmeancycle.
22.148 +- \ref KarpMmc Karp's original algorithm \cite karp78characterization.
22.149 - \ref HartmannOrlinMmc Hartmann-Orlin's algorithm, which is an improved
22.150 - version of Karp's algorithm \ref dasdan98minmeancycle.
22.151 + version of Karp's algorithm \cite hartmann93finding.
22.152 - \ref HowardMmc Howard's policy iteration algorithm
22.153 - \ref dasdan98minmeancycle.
22.154 + \cite dasdan98minmeancycle, \cite dasdan04experimental.
22.155
22.156 -In practice, the \ref HowardMmc "Howard" algorithm proved to be by far the
22.157 +In practice, the \ref HowardMmc "Howard" algorithm turned out to be by far the
22.158 most efficient one, though the best known theoretical bound on its running
22.159 time is exponential.
22.160 Both \ref KarpMmc "Karp" and \ref HartmannOrlinMmc "Hartmann-Orlin" algorithms
22.161 -run in time O(ne) and use space O(n<sup>2</sup>+e), but the latter one is
22.162 -typically faster due to the applied early termination scheme.
22.163 +run in time O(nm) and use space O(n<sup>2</sup>+m).
22.164 */
22.165
22.166 /**
22.167 @@ -539,7 +561,7 @@
22.168 */
22.169
22.170 /**
22.171 -@defgroup planar Planarity Embedding and Drawing
22.172 +@defgroup planar Planar Embedding and Drawing
22.173 @ingroup algs
22.174 \brief Algorithms for planarity checking, embedding and drawing
22.175
22.176 @@ -551,12 +573,52 @@
22.177 */
22.178
22.179 /**
22.180 -@defgroup approx Approximation Algorithms
22.181 +@defgroup tsp Traveling Salesman Problem
22.182 +@ingroup algs
22.183 +\brief Algorithms for the symmetric traveling salesman problem
22.184 +
22.185 +This group contains basic heuristic algorithms for the the symmetric
22.186 +\e traveling \e salesman \e problem (TSP).
22.187 +Given an \ref FullGraph "undirected full graph" with a cost map on its edges,
22.188 +the problem is to find a shortest possible tour that visits each node exactly
22.189 +once (i.e. the minimum cost Hamiltonian cycle).
22.190 +
22.191 +These TSP algorithms are intended to be used with a \e metric \e cost
22.192 +\e function, i.e. the edge costs should satisfy the triangle inequality.
22.193 +Otherwise the algorithms could yield worse results.
22.194 +
22.195 +LEMON provides five well-known heuristics for solving symmetric TSP:
22.196 + - \ref NearestNeighborTsp Neareast neighbor algorithm
22.197 + - \ref GreedyTsp Greedy algorithm
22.198 + - \ref InsertionTsp Insertion heuristic (with four selection methods)
22.199 + - \ref ChristofidesTsp Christofides algorithm
22.200 + - \ref Opt2Tsp 2-opt algorithm
22.201 +
22.202 +\ref NearestNeighborTsp, \ref GreedyTsp, and \ref InsertionTsp are the fastest
22.203 +solution methods. Furthermore, \ref InsertionTsp is usually quite effective.
22.204 +
22.205 +\ref ChristofidesTsp is somewhat slower, but it has the best guaranteed
22.206 +approximation factor: 3/2.
22.207 +
22.208 +\ref Opt2Tsp usually provides the best results in practice, but
22.209 +it is the slowest method. It can also be used to improve given tours,
22.210 +for example, the results of other algorithms.
22.211 +
22.212 +\image html tsp.png
22.213 +\image latex tsp.eps "Traveling salesman problem" width=\textwidth
22.214 +*/
22.215 +
22.216 +/**
22.217 +@defgroup approx_algs Approximation Algorithms
22.218 @ingroup algs
22.219 \brief Approximation algorithms.
22.220
22.221 This group contains the approximation and heuristic algorithms
22.222 implemented in LEMON.
22.223 +
22.224 +<b>Maximum Clique Problem</b>
22.225 + - \ref GrossoLocatelliPullanMc An efficient heuristic algorithm of
22.226 + Grosso, Locatelli, and Pullan.
22.227 */
22.228
22.229 /**
22.230 @@ -586,8 +648,8 @@
22.231 Various LP solvers could be used in the same manner with this
22.232 high-level interface.
22.233
22.234 -The currently supported solvers are \ref glpk, \ref clp, \ref cbc,
22.235 -\ref cplex, \ref soplex.
22.236 +The currently supported solvers are \cite glpk, \cite clp, \cite cbc,
22.237 +\cite cplex, \cite soplex.
22.238 */
22.239
22.240 /**
22.241 @@ -674,6 +736,8 @@
22.242
22.243 This group contains general \c EPS drawing methods and special
22.244 graph exporting tools.
22.245 +
22.246 +\image html graph_to_eps.png
22.247 */
22.248
22.249 /**
23.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
23.2 +++ b/doc/images/adaptors1.eps Wed Oct 17 19:14:07 2018 +0200
23.3 @@ -0,0 +1,303 @@
23.4 +%!PS-Adobe-2.0 EPSF-2.0
23.5 +%%Title: adaptors1.fig
23.6 +%%Creator: fig2dev Version 3.2 Patchlevel 5
23.7 +%%CreationDate: Sun Feb 21 18:51:21 2010
23.8 +%%For: Peter@KOVACSPETER (Péter,U-KOVACSPETER\Peter,S-1-5-21-1774138250-1299389707-1938712334-1001)
23.9 +%%BoundingBox: 0 0 787 372
23.10 +%Magnification: 1.0000
23.11 +%%EndComments
23.12 +/$F2psDict 200 dict def
23.13 +$F2psDict begin
23.14 +$F2psDict /mtrx matrix put
23.15 +/col-1 {0 setgray} bind def
23.16 +/col0 {0.000 0.000 0.000 srgb} bind def
23.17 +/col1 {0.000 0.000 1.000 srgb} bind def
23.18 +/col2 {0.000 1.000 0.000 srgb} bind def
23.19 +/col3 {0.000 1.000 1.000 srgb} bind def
23.20 +/col4 {1.000 0.000 0.000 srgb} bind def
23.21 +/col5 {1.000 0.000 1.000 srgb} bind def
23.22 +/col6 {1.000 1.000 0.000 srgb} bind def
23.23 +/col7 {1.000 1.000 1.000 srgb} bind def
23.24 +/col8 {0.000 0.000 0.560 srgb} bind def
23.25 +/col9 {0.000 0.000 0.690 srgb} bind def
23.26 +/col10 {0.000 0.000 0.820 srgb} bind def
23.27 +/col11 {0.530 0.810 1.000 srgb} bind def
23.28 +/col12 {0.000 0.560 0.000 srgb} bind def
23.29 +/col13 {0.000 0.690 0.000 srgb} bind def
23.30 +/col14 {0.000 0.820 0.000 srgb} bind def
23.31 +/col15 {0.000 0.560 0.560 srgb} bind def
23.32 +/col16 {0.000 0.690 0.690 srgb} bind def
23.33 +/col17 {0.000 0.820 0.820 srgb} bind def
23.34 +/col18 {0.560 0.000 0.000 srgb} bind def
23.35 +/col19 {0.690 0.000 0.000 srgb} bind def
23.36 +/col20 {0.820 0.000 0.000 srgb} bind def
23.37 +/col21 {0.560 0.000 0.560 srgb} bind def
23.38 +/col22 {0.690 0.000 0.690 srgb} bind def
23.39 +/col23 {0.820 0.000 0.820 srgb} bind def
23.40 +/col24 {0.500 0.190 0.000 srgb} bind def
23.41 +/col25 {0.630 0.250 0.000 srgb} bind def
23.42 +/col26 {0.750 0.380 0.000 srgb} bind def
23.43 +/col27 {1.000 0.500 0.500 srgb} bind def
23.44 +/col28 {1.000 0.630 0.630 srgb} bind def
23.45 +/col29 {1.000 0.750 0.750 srgb} bind def
23.46 +/col30 {1.000 0.880 0.880 srgb} bind def
23.47 +/col31 {1.000 0.840 0.000 srgb} bind def
23.48 +
23.49 +end
23.50 +save
23.51 +newpath 0 372 moveto 0 0 lineto 787 0 lineto 787 372 lineto closepath clip newpath
23.52 +-14.2 385.4 translate
23.53 +1 -1 scale
23.54 +
23.55 +/cp {closepath} bind def
23.56 +/ef {eofill} bind def
23.57 +/gr {grestore} bind def
23.58 +/gs {gsave} bind def
23.59 +/sa {save} bind def
23.60 +/rs {restore} bind def
23.61 +/l {lineto} bind def
23.62 +/m {moveto} bind def
23.63 +/rm {rmoveto} bind def
23.64 +/n {newpath} bind def
23.65 +/s {stroke} bind def
23.66 +/sh {show} bind def
23.67 +/slc {setlinecap} bind def
23.68 +/slj {setlinejoin} bind def
23.69 +/slw {setlinewidth} bind def
23.70 +/srgb {setrgbcolor} bind def
23.71 +/rot {rotate} bind def
23.72 +/sc {scale} bind def
23.73 +/sd {setdash} bind def
23.74 +/ff {findfont} bind def
23.75 +/sf {setfont} bind def
23.76 +/scf {scalefont} bind def
23.77 +/sw {stringwidth} bind def
23.78 +/tr {translate} bind def
23.79 +/tnt {dup dup currentrgbcolor
23.80 + 4 -2 roll dup 1 exch sub 3 -1 roll mul add
23.81 + 4 -2 roll dup 1 exch sub 3 -1 roll mul add
23.82 + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
23.83 + bind def
23.84 +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
23.85 + 4 -2 roll mul srgb} bind def
23.86 + /DrawEllipse {
23.87 + /endangle exch def
23.88 + /startangle exch def
23.89 + /yrad exch def
23.90 + /xrad exch def
23.91 + /y exch def
23.92 + /x exch def
23.93 + /savematrix mtrx currentmatrix def
23.94 + x y tr xrad yrad sc 0 0 1 startangle endangle arc
23.95 + closepath
23.96 + savematrix setmatrix
23.97 + } def
23.98 +
23.99 +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
23.100 +/$F2psEnd {$F2psEnteredState restore end} def
23.101 +
23.102 +$F2psBegin
23.103 +10 setmiterlimit
23.104 +0 slj 0 slc
23.105 + 0.06299 0.06299 sc
23.106 +%
23.107 +% Fig objects follow
23.108 +%
23.109 +%
23.110 +% here starts figure with depth 60
23.111 +% Polyline
23.112 +0 slj
23.113 +0 slc
23.114 +15.000 slw
23.115 +gs clippath
23.116 +6319 5229 m 6442 5564 l 6527 5533 l 6403 5198 l 6403 5198 l 6424 5383 l 6319 5229 l cp
23.117 +eoclip
23.118 +n 5850 3825 m
23.119 + 6480 5535 l gs col0 s gr gr
23.120 +
23.121 +% arrowhead
23.122 +75.000 slw
23.123 +n 6319 5229 m 6424 5383 l 6403 5198 l 6319 5229 l cp gs 0.00 setgray ef gr col0 s
23.124 +% Polyline
23.125 +15.000 slw
23.126 +gs clippath
23.127 +5417 4044 m 5746 3905 l 5711 3822 l 5382 3961 l 5382 3961 l 5566 3933 l 5417 4044 l cp
23.128 +eoclip
23.129 +n 1575 5625 m
23.130 + 5715 3870 l gs col0 s gr gr
23.131 +
23.132 +% arrowhead
23.133 +75.000 slw
23.134 +n 5417 4044 m 5566 3933 l 5382 3961 l 5417 4044 l cp gs 0.00 setgray ef gr col0 s
23.135 +% Polyline
23.136 +15.000 slw
23.137 +gs clippath
23.138 +3897 3780 m 3540 3780 l 3540 3870 l 3897 3870 l 3897 3870 l 3717 3825 l 3897 3780 l cp
23.139 +eoclip
23.140 +n 5625 3825 m
23.141 + 3555 3825 l gs col0 s gr gr
23.142 +
23.143 +% arrowhead
23.144 +75.000 slw
23.145 +n 3897 3780 m 3717 3825 l 3897 3870 l 3897 3780 l cp gs 0.00 setgray ef gr col0 s
23.146 +% Polyline
23.147 +15.000 slw
23.148 +gs clippath
23.149 +3075 4188 m 3327 3936 l 3263 3872 l 3011 4124 l 3011 4124 l 3171 4029 l 3075 4188 l cp
23.150 +eoclip
23.151 +n 1575 5625 m
23.152 + 3285 3915 l gs col0 s gr gr
23.153 +
23.154 +% arrowhead
23.155 +75.000 slw
23.156 +n 3075 4188 m 3171 4029 l 3011 4124 l 3075 4188 l cp gs 0.00 setgray ef gr col0 s
23.157 +% Polyline
23.158 +15.000 slw
23.159 +gs clippath
23.160 +3528 2520 m 3885 2520 l 3885 2430 l 3528 2430 l 3528 2430 l 3708 2475 l 3528 2520 l cp
23.161 +eoclip
23.162 +n 1800 2475 m
23.163 + 3870 2475 l gs col0 s gr gr
23.164 +
23.165 +% arrowhead
23.166 +75.000 slw
23.167 +n 3528 2520 m 3708 2475 l 3528 2430 l 3528 2520 l cp gs 0.00 setgray ef gr col0 s
23.168 +% Polyline
23.169 +15.000 slw
23.170 +gs clippath
23.171 +4304 2156 m 4052 2408 l 4116 2472 l 4368 2220 l 4368 2220 l 4209 2316 l 4304 2156 l cp
23.172 +eoclip
23.173 +n 5850 675 m
23.174 + 4095 2430 l gs col0 s gr gr
23.175 +
23.176 +% arrowhead
23.177 +75.000 slw
23.178 +n 4304 2156 m 4209 2316 l 4368 2220 l 4304 2156 l cp gs 0.00 setgray ef gr col0 s
23.179 +% Polyline
23.180 +15.000 slw
23.181 +gs clippath
23.182 +6319 2079 m 6442 2414 l 6527 2383 l 6403 2048 l 6403 2048 l 6424 2233 l 6319 2079 l cp
23.183 +eoclip
23.184 +n 5850 675 m
23.185 + 6480 2385 l gs col0 s gr gr
23.186 +
23.187 +% arrowhead
23.188 +75.000 slw
23.189 +n 6319 2079 m 6424 2233 l 6403 2048 l 6319 2079 l cp gs 0.00 setgray ef gr col0 s
23.190 +% Polyline
23.191 +15.000 slw
23.192 +gs clippath
23.193 +5417 894 m 5746 755 l 5711 672 l 5382 811 l 5382 811 l 5566 783 l 5417 894 l cp
23.194 +eoclip
23.195 +n 1575 2475 m
23.196 + 5715 720 l gs col0 s gr gr
23.197 +
23.198 +% arrowhead
23.199 +75.000 slw
23.200 +n 5417 894 m 5566 783 l 5382 811 l 5417 894 l cp gs 0.00 setgray ef gr col0 s
23.201 +% Polyline
23.202 +15.000 slw
23.203 +gs clippath
23.204 +3528 5670 m 3885 5670 l 3885 5580 l 3528 5580 l 3528 5580 l 3708 5625 l 3528 5670 l cp
23.205 +eoclip
23.206 +n 1800 5625 m
23.207 + 3870 5625 l gs col0 s gr gr
23.208 +
23.209 +% arrowhead
23.210 +75.000 slw
23.211 +n 3528 5670 m 3708 5625 l 3528 5580 l 3528 5670 l cp gs 0.00 setgray ef gr col0 s
23.212 +% Polyline
23.213 +15.000 slw
23.214 +gs clippath
23.215 +4572 5580 m 4215 5580 l 4215 5670 l 4572 5670 l 4572 5670 l 4392 5625 l 4572 5580 l cp
23.216 +eoclip
23.217 +n 6300 5625 m
23.218 + 4230 5625 l gs col0 s gr gr
23.219 +
23.220 +% arrowhead
23.221 +75.000 slw
23.222 +n 4572 5580 m 4392 5625 l 4572 5670 l 4572 5580 l cp gs 0.00 setgray ef gr col0 s
23.223 +% Polyline
23.224 +15.000 slw
23.225 +gs clippath
23.226 +4304 5306 m 4052 5558 l 4116 5622 l 4368 5370 l 4368 5370 l 4209 5466 l 4304 5306 l cp
23.227 +eoclip
23.228 +n 5850 3825 m
23.229 + 4095 5580 l gs col0 s gr gr
23.230 +
23.231 +% arrowhead
23.232 +75.000 slw
23.233 +n 4304 5306 m 4209 5466 l 4368 5370 l 4304 5306 l cp gs 0.00 setgray ef gr col0 s
23.234 +% here ends figure;
23.235 +%
23.236 +% here starts figure with depth 50
23.237 +% Ellipse
23.238 +15.000 slw
23.239 +n 3375 3825 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
23.240 +
23.241 +% Ellipse
23.242 +n 5850 3825 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
23.243 +
23.244 +% Polyline
23.245 +0 slj
23.246 +0 slc
23.247 +n 247 2947 m 2947 247 l 9697 247 l 6997 2947 l
23.248 + 247 2947 l cp gs col0 s gr
23.249 +% Polyline
23.250 +n 247 6097 m 2947 3397 l 9697 3397 l 6997 6097 l
23.251 + 247 6097 l cp gs col0 s gr
23.252 +% Ellipse
23.253 +n 1575 2475 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
23.254 +
23.255 +% Ellipse
23.256 +n 4050 2475 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
23.257 +
23.258 +% Ellipse
23.259 +n 6525 2475 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
23.260 +
23.261 +% Ellipse
23.262 +n 5850 675 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
23.263 +
23.264 +% Ellipse
23.265 +n 1575 5625 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
23.266 +
23.267 +% Ellipse
23.268 +n 4050 5625 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
23.269 +
23.270 +% Ellipse
23.271 +n 6525 5625 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
23.272 +
23.273 +% here ends figure;
23.274 +%
23.275 +% here starts figure with depth 40
23.276 +/Helvetica ff 480.00 scf sf
23.277 +8280 2610 m
23.278 +gs 1 -1 sc (SubDigraph adaptor) col0 sh gr
23.279 +% Polyline
23.280 +0 slj
23.281 +0 slc
23.282 +7.500 slw
23.283 + [15 45] 45 sd
23.284 +n 4050 2610 m
23.285 + 4050 5625 l gs col0 s gr [] 0 sd
23.286 +% Polyline
23.287 + [15 45] 45 sd
23.288 +n 5850 810 m
23.289 + 5850 3825 l gs col0 s gr [] 0 sd
23.290 +% Polyline
23.291 + [15 45] 45 sd
23.292 +n 6525 2610 m
23.293 + 6525 5625 l gs col0 s gr [] 0 sd
23.294 +/Helvetica ff 480.00 scf sf
23.295 +8280 5760 m
23.296 +gs 1 -1 sc (Original digraph) col0 sh gr
23.297 +% Polyline
23.298 + [15 45] 45 sd
23.299 +n 1575 2610 m
23.300 + 1575 5625 l gs col0 s gr [] 0 sd
23.301 +% here ends figure;
23.302 +$F2psEnd
23.303 +rs
23.304 +showpage
23.305 +%%Trailer
23.306 +%EOF
24.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
24.2 +++ b/doc/images/adaptors2.eps Wed Oct 17 19:14:07 2018 +0200
24.3 @@ -0,0 +1,349 @@
24.4 +%!PS-Adobe-2.0 EPSF-2.0
24.5 +%%Title: adaptors2.fig
24.6 +%%Creator: fig2dev Version 3.2 Patchlevel 5
24.7 +%%CreationDate: Sun Feb 21 18:51:31 2010
24.8 +%%For: Peter@KOVACSPETER (Péter,U-KOVACSPETER\Peter,S-1-5-21-1774138250-1299389707-1938712334-1001)
24.9 +%%BoundingBox: 0 0 787 570
24.10 +%Magnification: 1.0000
24.11 +%%EndComments
24.12 +/$F2psDict 200 dict def
24.13 +$F2psDict begin
24.14 +$F2psDict /mtrx matrix put
24.15 +/col-1 {0 setgray} bind def
24.16 +/col0 {0.000 0.000 0.000 srgb} bind def
24.17 +/col1 {0.000 0.000 1.000 srgb} bind def
24.18 +/col2 {0.000 1.000 0.000 srgb} bind def
24.19 +/col3 {0.000 1.000 1.000 srgb} bind def
24.20 +/col4 {1.000 0.000 0.000 srgb} bind def
24.21 +/col5 {1.000 0.000 1.000 srgb} bind def
24.22 +/col6 {1.000 1.000 0.000 srgb} bind def
24.23 +/col7 {1.000 1.000 1.000 srgb} bind def
24.24 +/col8 {0.000 0.000 0.560 srgb} bind def
24.25 +/col9 {0.000 0.000 0.690 srgb} bind def
24.26 +/col10 {0.000 0.000 0.820 srgb} bind def
24.27 +/col11 {0.530 0.810 1.000 srgb} bind def
24.28 +/col12 {0.000 0.560 0.000 srgb} bind def
24.29 +/col13 {0.000 0.690 0.000 srgb} bind def
24.30 +/col14 {0.000 0.820 0.000 srgb} bind def
24.31 +/col15 {0.000 0.560 0.560 srgb} bind def
24.32 +/col16 {0.000 0.690 0.690 srgb} bind def
24.33 +/col17 {0.000 0.820 0.820 srgb} bind def
24.34 +/col18 {0.560 0.000 0.000 srgb} bind def
24.35 +/col19 {0.690 0.000 0.000 srgb} bind def
24.36 +/col20 {0.820 0.000 0.000 srgb} bind def
24.37 +/col21 {0.560 0.000 0.560 srgb} bind def
24.38 +/col22 {0.690 0.000 0.690 srgb} bind def
24.39 +/col23 {0.820 0.000 0.820 srgb} bind def
24.40 +/col24 {0.500 0.190 0.000 srgb} bind def
24.41 +/col25 {0.630 0.250 0.000 srgb} bind def
24.42 +/col26 {0.750 0.380 0.000 srgb} bind def
24.43 +/col27 {1.000 0.500 0.500 srgb} bind def
24.44 +/col28 {1.000 0.630 0.630 srgb} bind def
24.45 +/col29 {1.000 0.750 0.750 srgb} bind def
24.46 +/col30 {1.000 0.880 0.880 srgb} bind def
24.47 +/col31 {1.000 0.840 0.000 srgb} bind def
24.48 +
24.49 +end
24.50 +save
24.51 +newpath 0 570 moveto 0 0 lineto 787 0 lineto 787 570 lineto closepath clip newpath
24.52 +-14.2 583.9 translate
24.53 +1 -1 scale
24.54 +
24.55 +/cp {closepath} bind def
24.56 +/ef {eofill} bind def
24.57 +/gr {grestore} bind def
24.58 +/gs {gsave} bind def
24.59 +/sa {save} bind def
24.60 +/rs {restore} bind def
24.61 +/l {lineto} bind def
24.62 +/m {moveto} bind def
24.63 +/rm {rmoveto} bind def
24.64 +/n {newpath} bind def
24.65 +/s {stroke} bind def
24.66 +/sh {show} bind def
24.67 +/slc {setlinecap} bind def
24.68 +/slj {setlinejoin} bind def
24.69 +/slw {setlinewidth} bind def
24.70 +/srgb {setrgbcolor} bind def
24.71 +/rot {rotate} bind def
24.72 +/sc {scale} bind def
24.73 +/sd {setdash} bind def
24.74 +/ff {findfont} bind def
24.75 +/sf {setfont} bind def
24.76 +/scf {scalefont} bind def
24.77 +/sw {stringwidth} bind def
24.78 +/tr {translate} bind def
24.79 +/tnt {dup dup currentrgbcolor
24.80 + 4 -2 roll dup 1 exch sub 3 -1 roll mul add
24.81 + 4 -2 roll dup 1 exch sub 3 -1 roll mul add
24.82 + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
24.83 + bind def
24.84 +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
24.85 + 4 -2 roll mul srgb} bind def
24.86 + /DrawEllipse {
24.87 + /endangle exch def
24.88 + /startangle exch def
24.89 + /yrad exch def
24.90 + /xrad exch def
24.91 + /y exch def
24.92 + /x exch def
24.93 + /savematrix mtrx currentmatrix def
24.94 + x y tr xrad yrad sc 0 0 1 startangle endangle arc
24.95 + closepath
24.96 + savematrix setmatrix
24.97 + } def
24.98 +
24.99 +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
24.100 +/$F2psEnd {$F2psEnteredState restore end} def
24.101 +
24.102 +$F2psBegin
24.103 +10 setmiterlimit
24.104 +0 slj 0 slc
24.105 + 0.06299 0.06299 sc
24.106 +%
24.107 +% Fig objects follow
24.108 +%
24.109 +%
24.110 +% here starts figure with depth 60
24.111 +% Polyline
24.112 +0 slj
24.113 +0 slc
24.114 +15.000 slw
24.115 +gs clippath
24.116 +5417 4044 m 5746 3905 l 5711 3822 l 5382 3961 l 5382 3961 l 5566 3933 l 5417 4044 l cp
24.117 +eoclip
24.118 +n 1575 5625 m
24.119 + 5715 3870 l gs col0 s gr gr
24.120 +
24.121 +% arrowhead
24.122 +75.000 slw
24.123 +n 5417 4044 m 5566 3933 l 5382 3961 l 5417 4044 l cp gs 0.00 setgray ef gr col0 s
24.124 +% Polyline
24.125 +15.000 slw
24.126 +gs clippath
24.127 +5417 7194 m 5746 7055 l 5711 6972 l 5382 7111 l 5382 7111 l 5566 7083 l 5417 7194 l cp
24.128 +eoclip
24.129 +n 1575 8775 m
24.130 + 5715 7020 l gs col0 s gr gr
24.131 +
24.132 +% arrowhead
24.133 +75.000 slw
24.134 +n 5417 7194 m 5566 7083 l 5382 7111 l 5417 7194 l cp gs 0.00 setgray ef gr col0 s
24.135 +% Polyline
24.136 +15.000 slw
24.137 +gs clippath
24.138 +6319 8379 m 6442 8714 l 6527 8683 l 6403 8348 l 6403 8348 l 6424 8533 l 6319 8379 l cp
24.139 +eoclip
24.140 +n 5850 6975 m
24.141 + 6480 8685 l gs col0 s gr gr
24.142 +
24.143 +% arrowhead
24.144 +75.000 slw
24.145 +n 6319 8379 m 6424 8533 l 6403 8348 l 6319 8379 l cp gs 0.00 setgray ef gr col0 s
24.146 +% Polyline
24.147 +15.000 slw
24.148 +gs clippath
24.149 +4304 8456 m 4052 8708 l 4116 8772 l 4368 8520 l 4368 8520 l 4209 8616 l 4304 8456 l cp
24.150 +eoclip
24.151 +n 5850 6975 m
24.152 + 4095 8730 l gs col0 s gr gr
24.153 +
24.154 +% arrowhead
24.155 +75.000 slw
24.156 +n 4304 8456 m 4209 8616 l 4368 8520 l 4304 8456 l cp gs 0.00 setgray ef gr col0 s
24.157 +% Polyline
24.158 +15.000 slw
24.159 +gs clippath
24.160 +4572 8730 m 4215 8730 l 4215 8820 l 4572 8820 l 4572 8820 l 4392 8775 l 4572 8730 l cp
24.161 +eoclip
24.162 +n 6300 8775 m
24.163 + 4230 8775 l gs col0 s gr gr
24.164 +
24.165 +% arrowhead
24.166 +75.000 slw
24.167 +n 4572 8730 m 4392 8775 l 4572 8820 l 4572 8730 l cp gs 0.00 setgray ef gr col0 s
24.168 +% Polyline
24.169 +15.000 slw
24.170 +gs clippath
24.171 +3528 8820 m 3885 8820 l 3885 8730 l 3528 8730 l 3528 8730 l 3708 8775 l 3528 8820 l cp
24.172 +eoclip
24.173 +n 1800 8775 m
24.174 + 3870 8775 l gs col0 s gr gr
24.175 +
24.176 +% arrowhead
24.177 +75.000 slw
24.178 +n 3528 8820 m 3708 8775 l 3528 8730 l 3528 8820 l cp gs 0.00 setgray ef gr col0 s
24.179 +% Polyline
24.180 +15.000 slw
24.181 +n 1800 2475 m
24.182 + 3870 2475 l gs col0 s gr
24.183 +% Polyline
24.184 +n 1575 2475 m
24.185 + 5715 720 l gs col0 s gr
24.186 +% Polyline
24.187 +n 5850 675 m
24.188 + 4095 2430 l gs col0 s gr
24.189 +% Polyline
24.190 +n 5850 675 m
24.191 + 6480 2385 l gs col0 s gr
24.192 +% Polyline
24.193 +gs clippath
24.194 +3075 7338 m 3327 7086 l 3263 7022 l 3011 7274 l 3011 7274 l 3171 7179 l 3075 7338 l cp
24.195 +eoclip
24.196 +n 1575 8775 m
24.197 + 3285 7065 l gs col0 s gr gr
24.198 +
24.199 +% arrowhead
24.200 +75.000 slw
24.201 +n 3075 7338 m 3171 7179 l 3011 7274 l 3075 7338 l cp gs 0.00 setgray ef gr col0 s
24.202 +% Polyline
24.203 +15.000 slw
24.204 +gs clippath
24.205 +3528 5670 m 3885 5670 l 3885 5580 l 3528 5580 l 3528 5580 l 3708 5625 l 3528 5670 l cp
24.206 +eoclip
24.207 +n 1800 5625 m
24.208 + 3870 5625 l gs col0 s gr gr
24.209 +
24.210 +% arrowhead
24.211 +75.000 slw
24.212 +n 3528 5670 m 3708 5625 l 3528 5580 l 3528 5670 l cp gs 0.00 setgray ef gr col0 s
24.213 +% Polyline
24.214 +15.000 slw
24.215 +gs clippath
24.216 +4304 5306 m 4052 5558 l 4116 5622 l 4368 5370 l 4368 5370 l 4209 5466 l 4304 5306 l cp
24.217 +eoclip
24.218 +n 5850 3825 m
24.219 + 4095 5580 l gs col0 s gr gr
24.220 +
24.221 +% arrowhead
24.222 +75.000 slw
24.223 +n 4304 5306 m 4209 5466 l 4368 5370 l 4304 5306 l cp gs 0.00 setgray ef gr col0 s
24.224 +% Polyline
24.225 +15.000 slw
24.226 +gs clippath
24.227 +6319 5229 m 6442 5564 l 6527 5533 l 6403 5198 l 6403 5198 l 6424 5383 l 6319 5229 l cp
24.228 +eoclip
24.229 +n 5850 3825 m
24.230 + 6480 5535 l gs col0 s gr gr
24.231 +
24.232 +% arrowhead
24.233 +75.000 slw
24.234 +n 6319 5229 m 6424 5383 l 6403 5198 l 6319 5229 l cp gs 0.00 setgray ef gr col0 s
24.235 +% Polyline
24.236 +15.000 slw
24.237 +gs clippath
24.238 +3897 6930 m 3540 6930 l 3540 7020 l 3897 7020 l 3897 7020 l 3717 6975 l 3897 6930 l cp
24.239 +eoclip
24.240 +n 5625 6975 m
24.241 + 3555 6975 l gs col0 s gr gr
24.242 +
24.243 +% arrowhead
24.244 +75.000 slw
24.245 +n 3897 6930 m 3717 6975 l 3897 7020 l 3897 6930 l cp gs 0.00 setgray ef gr col0 s
24.246 +% here ends figure;
24.247 +%
24.248 +% here starts figure with depth 50
24.249 +% Polyline
24.250 +0 slj
24.251 +0 slc
24.252 +15.000 slw
24.253 +n 247 6097 m 2947 3397 l 9697 3397 l 6997 6097 l
24.254 + 247 6097 l cp gs col0 s gr
24.255 +% Polyline
24.256 +n 247 9247 m 2947 6547 l 9697 6547 l 6997 9247 l
24.257 + 247 9247 l cp gs col0 s gr
24.258 +% Ellipse
24.259 +n 4050 2475 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
24.260 +
24.261 +% Ellipse
24.262 +n 6525 2475 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
24.263 +
24.264 +% Ellipse
24.265 +n 1575 2475 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
24.266 +
24.267 +% Ellipse
24.268 +n 5850 675 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
24.269 +
24.270 +% Ellipse
24.271 +n 1575 5625 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
24.272 +
24.273 +% Ellipse
24.274 +n 4050 5625 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
24.275 +
24.276 +% Ellipse
24.277 +n 6525 5625 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
24.278 +
24.279 +% Ellipse
24.280 +n 5850 3825 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
24.281 +
24.282 +% Ellipse
24.283 +n 1575 8775 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
24.284 +
24.285 +% Ellipse
24.286 +n 4050 8775 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
24.287 +
24.288 +% Ellipse
24.289 +n 3375 6975 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
24.290 +
24.291 +% Ellipse
24.292 +n 6525 8775 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
24.293 +
24.294 +% Ellipse
24.295 +n 5850 6975 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
24.296 +
24.297 +% Polyline
24.298 +n 247 2947 m 2947 247 l 9697 247 l 6997 2947 l
24.299 + 247 2947 l cp gs col0 s gr
24.300 +% here ends figure;
24.301 +%
24.302 +% here starts figure with depth 40
24.303 +/Helvetica ff 480.00 scf sf
24.304 +8280 8910 m
24.305 +gs 1 -1 sc (Original digraph) col0 sh gr
24.306 +% Polyline
24.307 +0 slj
24.308 +0 slc
24.309 +7.500 slw
24.310 + [15 45] 45 sd
24.311 +n 5850 810 m
24.312 + 5850 3825 l gs col0 s gr [] 0 sd
24.313 +% Polyline
24.314 + [15 45] 45 sd
24.315 +n 6525 2610 m
24.316 + 6525 5625 l gs col0 s gr [] 0 sd
24.317 +% Polyline
24.318 + [15 45] 45 sd
24.319 +n 4050 2610 m
24.320 + 4050 5625 l gs col0 s gr [] 0 sd
24.321 +% Polyline
24.322 + [15 45] 45 sd
24.323 +n 1575 2610 m
24.324 + 1575 5625 l gs col0 s gr [] 0 sd
24.325 +% Polyline
24.326 + [15 45] 45 sd
24.327 +n 5850 3960 m
24.328 + 5850 6975 l gs col0 s gr [] 0 sd
24.329 +% Polyline
24.330 + [15 45] 45 sd
24.331 +n 6525 5760 m
24.332 + 6525 8775 l gs col0 s gr [] 0 sd
24.333 +% Polyline
24.334 + [15 45] 45 sd
24.335 +n 4050 5760 m
24.336 + 4050 8775 l gs col0 s gr [] 0 sd
24.337 +/Helvetica ff 480.00 scf sf
24.338 +8280 2610 m
24.339 +gs 1 -1 sc (Undirector adaptor) col0 sh gr
24.340 +/Helvetica ff 480.00 scf sf
24.341 +8280 5760 m
24.342 +gs 1 -1 sc (SubDigraph adaptor) col0 sh gr
24.343 +% Polyline
24.344 + [15 45] 45 sd
24.345 +n 1575 5760 m
24.346 + 1575 8775 l gs col0 s gr [] 0 sd
24.347 +% here ends figure;
24.348 +$F2psEnd
24.349 +rs
24.350 +showpage
24.351 +%%Trailer
24.352 +%EOF
25.1 --- a/doc/images/bipartite_partitions.eps Mon Jul 16 16:21:40 2018 +0200
25.2 +++ b/doc/images/bipartite_partitions.eps Wed Oct 17 19:14:07 2018 +0200
25.3 @@ -1,6 +1,6 @@
25.4 %!PS-Adobe-2.0 EPSF-2.0
25.5 %%Creator: LEMON, graphToEps()
25.6 -%%CreationDate: Tue Nov 15 16:51:43 2005
25.7 +%%CreationDate: Fri Mar 8 00:18:43 2013
25.8 %%BoundingBox: 0 0 842 596
25.9 %%EndComments
25.10 /lb { setlinewidth setrgbcolor newpath moveto
25.11 @@ -53,62 +53,62 @@
25.12 1197.47 -613.138 translate
25.13 %Edges:
25.14 gsave
25.15 -513.857 -446.322 296.569 -487.43 79.2808 -528.539 0 0 0 2 lb
25.16 -513.857 -446.322 575.52 -315.655 637.183 -184.989 0 0 0 2 lb
25.17 -393.468 566.711 494.771 434.577 596.074 302.442 0 0 0 2 lb
25.18 -393.468 566.711 155.625 579.925 -82.2171 593.138 0 0 0 2 lb
25.19 -393.468 566.711 251.056 450.726 108.644 334.741 0 0 0 2 lb
25.20 -869.153 52.8539 732.613 177.648 596.074 302.442 0 0 0 2 lb
25.21 -869.153 52.8539 753.168 -66.0676 637.183 -184.989 0 0 0 2 lb
25.22 --82.2171 593.138 -91.0261 346.487 -99.8351 99.8351 0 0 0 2 lb
25.23 --663.61 546.157 -753.168 394.936 -842.726 243.715 0 0 0 2 lb
25.24 --663.61 546.157 -574.052 437.513 -484.494 328.869 0 0 0 2 lb
25.25 --1077.63 161.498 -960.178 202.606 -842.726 243.715 0 0 0 2 lb
25.26 --1077.63 161.498 -968.987 66.0674 -860.344 -29.3633 0 0 0 2 lb
25.27 --1177.47 -234.906 -1029.18 -381.722 -880.898 -528.539 0 0 0 2 lb
25.28 --1177.47 -234.906 -1018.91 -132.135 -860.344 -29.3633 0 0 0 2 lb
25.29 --880.898 -528.539 -744.359 -387.595 -607.82 -246.651 0 0 0 2 lb
25.30 --499.175 -499.175 -355.295 -475.685 -211.415 -452.194 0 0 0 2 lb
25.31 --499.175 -499.175 -553.498 -372.913 -607.82 -246.651 0 0 0 2 lb
25.32 --499.175 -499.175 -386.587 -315.087 -274 -131 0 0 0 2 lb
25.33 -79.2808 -528.539 -66.0671 -490.366 -211.415 -452.194 0 0 0 2 lb
25.34 -637.183 -184.989 421.363 -253.993 205.543 -322.996 0 0 0 2 lb
25.35 -205.543 -322.996 162.966 -226.097 120.389 -129.198 0 0 0 2 lb
25.36 -399.34 88.0898 259.865 -20.5541 120.389 -129.198 0 0 0 2 lb
25.37 -399.34 88.0898 253.992 211.415 108.644 334.741 0 0 0 2 lb
25.38 --842.726 243.715 -471.281 171.775 -99.8351 99.8351 0 0 0 2 lb
25.39 --842.726 243.715 -558.363 56.3575 -274 -131 0 0 0 2 lb
25.40 --860.344 -29.3633 -734.082 -138.007 -607.82 -246.651 0 0 0 2 lb
25.41 --211.415 -452.194 -45.513 -290.696 120.389 -129.198 0 0 0 2 lb
25.42 --99.8351 99.8351 4.40445 217.288 108.644 334.741 0 0 0 2 lb
25.43 --99.8351 99.8351 -292.165 214.352 -484.494 328.869 0 0 0 2 lb
25.44 -120.389 -129.198 -76.8055 -130.099 -274 -131 0 0 0 2 lb
25.45 +513.857 -446.322 296.569 -487.43 79.2808 -528.539 0 0 0 7.00153 lb
25.46 +513.857 -446.322 575.52 -315.656 637.183 -184.989 0 0 0 7.00153 lb
25.47 +393.468 566.711 494.771 434.577 596.074 302.442 0 0 0 7.00153 lb
25.48 +393.468 566.711 155.625 579.925 -82.2171 593.138 0 0 0 7.00153 lb
25.49 +393.468 566.711 251.056 450.726 108.644 334.741 0 0 0 7.00153 lb
25.50 +869.153 52.8539 732.613 177.648 596.074 302.442 0 0 0 7.00153 lb
25.51 +869.153 52.8539 753.168 -66.0676 637.183 -184.989 0 0 0 7.00153 lb
25.52 +-82.2171 593.138 -91.0261 346.487 -99.8351 99.8351 0 0 0 7.00153 lb
25.53 +-663.61 546.157 -753.168 394.936 -842.726 243.715 0 0 0 7.00153 lb
25.54 +-663.61 546.157 -574.052 437.513 -484.494 328.869 0 0 0 7.00153 lb
25.55 +-1077.63 161.498 -960.178 202.606 -842.726 243.715 0 0 0 7.00153 lb
25.56 +-1077.63 161.498 -968.987 66.0674 -860.344 -29.3633 0 0 0 7.00153 lb
25.57 +-1177.47 -234.906 -1029.18 -381.722 -880.898 -528.539 0 0 0 7.00153 lb
25.58 +-1177.47 -234.906 -1018.91 -132.135 -860.344 -29.3633 0 0 0 7.00153 lb
25.59 +-880.898 -528.539 -744.359 -387.595 -607.82 -246.651 0 0 0 7.00153 lb
25.60 +-499.175 -499.175 -355.295 -475.685 -211.415 -452.194 0 0 0 7.00153 lb
25.61 +-499.175 -499.175 -553.498 -372.913 -607.82 -246.651 0 0 0 7.00153 lb
25.62 +-499.175 -499.175 -386.587 -315.087 -274 -131 0 0 0 7.00153 lb
25.63 +79.2808 -528.539 -66.0671 -490.366 -211.415 -452.194 0 0 0 7.00153 lb
25.64 +637.183 -184.989 421.363 -253.993 205.543 -322.996 0 0 0 7.00153 lb
25.65 +205.543 -322.996 162.966 -226.097 120.389 -129.198 0 0 0 7.00153 lb
25.66 +399.34 88.0898 259.865 -20.5541 120.389 -129.198 0 0 0 7.00153 lb
25.67 +399.34 88.0898 253.992 211.415 108.644 334.741 0 0 0 7.00153 lb
25.68 +-842.726 243.715 -471.281 171.775 -99.8351 99.8351 0 0 0 7.00153 lb
25.69 +-842.726 243.715 -558.363 56.3575 -274 -131 0 0 0 7.00153 lb
25.70 +-860.344 -29.3633 -734.082 -138.007 -607.82 -246.651 0 0 0 7.00153 lb
25.71 +-211.415 -452.194 -45.513 -290.696 120.389 -129.198 0 0 0 7.00153 lb
25.72 +-99.8351 99.8351 4.40445 217.288 108.644 334.741 0 0 0 7.00153 lb
25.73 +-99.8351 99.8351 -292.165 214.352 -484.494 328.869 0 0 0 7.00153 lb
25.74 +120.389 -129.198 -76.8055 -130.099 -274 -131 0 0 0 7.00153 lb
25.75 grestore
25.76 %Nodes:
25.77 gsave
25.78 --274 -131 20 1 0 0 nc
25.79 --607.82 -246.651 20 1 0 0 nc
25.80 --484.494 328.869 20 0 0 1 nc
25.81 -108.644 334.741 20 0 0 1 nc
25.82 -120.389 -129.198 20 0 0 1 nc
25.83 --99.8351 99.8351 20 1 0 0 nc
25.84 --211.415 -452.194 20 1 0 0 nc
25.85 --860.344 -29.3633 20 0 0 1 nc
25.86 --842.726 243.715 20 0 0 1 nc
25.87 -399.34 88.0898 20 1 0 0 nc
25.88 -205.543 -322.996 20 1 0 0 nc
25.89 -637.183 -184.989 20 0 0 1 nc
25.90 -79.2808 -528.539 20 0 0 1 nc
25.91 --499.175 -499.175 20 0 0 1 nc
25.92 --880.898 -528.539 20 0 0 1 nc
25.93 --1177.47 -234.906 20 1 0 0 nc
25.94 --1077.63 161.498 20 1 0 0 nc
25.95 --663.61 546.157 20 1 0 0 nc
25.96 --82.2171 593.138 20 0 0 1 nc
25.97 -596.074 302.442 20 0 0 1 nc
25.98 -869.153 52.8539 20 1 0 0 nc
25.99 -393.468 566.711 20 1 0 0 nc
25.100 -513.857 -446.322 20 1 0 0 nc
25.101 +-274 -131 23.3384 1 0 0 nc
25.102 +-607.82 -246.651 23.3384 1 0 0 nc
25.103 +-484.494 328.869 23.3384 0 0 1 nc
25.104 +108.644 334.741 23.3384 0 0 1 nc
25.105 +120.389 -129.198 23.3384 0 0 1 nc
25.106 +-99.8351 99.8351 23.3384 1 0 0 nc
25.107 +-211.415 -452.194 23.3384 1 0 0 nc
25.108 +-860.344 -29.3633 23.3384 0 0 1 nc
25.109 +-842.726 243.715 23.3384 0 0 1 nc
25.110 +399.34 88.0898 23.3384 1 0 0 nc
25.111 +205.543 -322.996 23.3384 1 0 0 nc
25.112 +637.183 -184.989 23.3384 0 0 1 nc
25.113 +79.2808 -528.539 23.3384 0 0 1 nc
25.114 +-499.175 -499.175 23.3384 0 0 1 nc
25.115 +-880.898 -528.539 23.3384 0 0 1 nc
25.116 +-1177.47 -234.906 23.3384 1 0 0 nc
25.117 +-1077.63 161.498 23.3384 1 0 0 nc
25.118 +-663.61 546.157 23.3384 1 0 0 nc
25.119 +-82.2171 593.138 23.3384 0 0 1 nc
25.120 +596.074 302.442 23.3384 0 0 1 nc
25.121 +869.153 52.8539 23.3384 1 0 0 nc
25.122 +393.468 566.711 23.3384 1 0 0 nc
25.123 +513.857 -446.322 23.3384 1 0 0 nc
25.124 grestore
25.125 grestore
25.126 showpage
26.1 --- a/doc/images/connected_components.eps Mon Jul 16 16:21:40 2018 +0200
26.2 +++ b/doc/images/connected_components.eps Wed Oct 17 19:14:07 2018 +0200
26.3 @@ -1,6 +1,6 @@
26.4 %!PS-Adobe-2.0 EPSF-2.0
26.5 %%Creator: LEMON, graphToEps()
26.6 -%%CreationDate: Fri Nov 4 13:47:12 2005
26.7 +%%CreationDate: Fri Mar 8 00:18:43 2013
26.8 %%BoundingBox: 0 0 842 596
26.9 %%EndComments
26.10 /lb { setlinewidth setrgbcolor newpath moveto
26.11 @@ -53,107 +53,107 @@
26.12 860.856 -588.349 translate
26.13 %Edges:
26.14 gsave
26.15 -574.035 177.301 622.149 225.748 670.264 274.195 0 0 0 2 lb
26.16 -694.579 115.483 682.421 194.839 670.264 274.195 0 0 0 2 lb
26.17 -280.402 10.3938 246.402 -6.60595 212.403 -23.6057 0 0 0 2 lb
26.18 -280.402 10.3938 283.493 -18.9695 286.584 -48.3327 0 0 0 2 lb
26.19 -212.403 -23.6057 249.493 -35.9692 286.584 -48.3327 0 0 0 2 lb
26.20 -286.584 -48.3327 326.765 -79.2414 366.947 -110.15 0 0 0 2 lb
26.21 -286.584 -48.3327 278.857 -111.695 271.13 -175.058 0 0 0 2 lb
26.22 -438.037 -88.514 417.946 -142.604 397.855 -196.694 0 0 0 2 lb
26.23 -438.037 -88.514 402.492 -99.332 366.947 -110.15 0 0 0 2 lb
26.24 -397.855 -196.694 382.401 -153.422 366.947 -110.15 0 0 0 2 lb
26.25 -366.947 -110.15 319.038 -142.604 271.13 -175.058 0 0 0 2 lb
26.26 -271.13 -175.058 274.221 -213.694 277.311 -252.33 0 0 0 2 lb
26.27 -271.13 -175.058 238.675 -190.512 206.221 -205.967 0 0 0 2 lb
26.28 -277.311 -252.33 241.766 -229.149 206.221 -205.967 0 0 0 2 lb
26.29 --840.856 -246.718 -804.351 -66.7145 -767.847 113.289 0 0 0 2 lb
26.30 --579.033 445.603 -673.44 279.446 -767.847 113.289 0 0 0 2 lb
26.31 --579.033 445.603 -524.906 302.104 -470.779 158.605 0 0 0 2 lb
26.32 --767.847 113.289 -619.313 135.947 -470.779 158.605 0 0 0 2 lb
26.33 -906.312 201.403 946.592 42.798 986.873 -115.807 0 0 0 2 lb
26.34 -906.312 201.403 834.562 91.8901 762.812 -17.6227 0 0 0 2 lb
26.35 -986.873 -115.807 874.842 -66.7148 762.812 -17.6227 0 0 0 2 lb
26.36 --470.779 158.605 -390.218 50.3508 -309.657 -57.9033 0 0 0 2 lb
26.37 -422.945 521.129 208.955 541.269 -5.03507 561.41 0 0 0 2 lb
26.38 -422.945 521.129 376.371 417.911 329.797 314.692 0 0 0 2 lb
26.39 -422.945 521.129 474.554 276.928 526.164 32.7279 0 0 0 2 lb
26.40 --5.03507 561.41 -36.5042 440.568 -67.9734 319.727 0 0 0 2 lb
26.41 -329.797 314.692 130.912 317.209 -67.9734 319.727 0 0 0 2 lb
26.42 --67.9734 319.727 229.095 176.227 526.164 32.7279 0 0 0 2 lb
26.43 -762.812 -17.6227 644.488 7.5526 526.164 32.7279 0 0 0 2 lb
26.44 -762.812 -17.6227 746.448 -162.381 730.084 -307.139 0 0 0 2 lb
26.45 -526.164 32.7279 470.779 -128.394 415.393 -289.516 0 0 0 2 lb
26.46 -730.084 -307.139 572.738 -298.327 415.393 -289.516 0 0 0 2 lb
26.47 -415.393 -289.516 173.71 -318.468 -67.9734 -347.42 0 0 0 2 lb
26.48 --67.9734 -347.42 -188.815 -202.662 -309.657 -57.9033 0 0 0 2 lb
26.49 --67.9734 -347.42 -195.758 -390.692 -323.543 -433.964 0 0 0 2 lb
26.50 --309.657 -57.9033 -424.775 -160.272 -539.894 -262.64 0 0 0 2 lb
26.51 --323.543 -433.964 -431.719 -348.302 -539.894 -262.64 0 0 0 2 lb
26.52 --26.6953 -19.9585 44.8558 -96.8093 116.407 -173.66 0 0 0 2 lb
26.53 --26.6953 -19.9585 87.2563 9.19185 201.208 38.3422 0 0 0 2 lb
26.54 --26.6953 -19.9585 -144.622 43.6422 -262.548 107.243 0 0 0 2 lb
26.55 --26.6953 -19.9585 -20.0703 56.8923 -13.4452 133.743 0 0 0 2 lb
26.56 -116.407 -173.66 158.808 -67.6589 201.208 38.3422 0 0 0 2 lb
26.57 --262.548 107.243 -137.997 120.493 -13.4452 133.743 0 0 0 2 lb
26.58 --262.548 107.243 -221.472 176.144 -180.397 245.045 0 0 0 2 lb
26.59 --13.4452 133.743 -96.9211 189.394 -180.397 245.045 0 0 0 2 lb
26.60 --180.397 245.045 -142.256 345.099 -132.697 451.748 0 0 0 2 lb
26.61 --180.397 245.045 -170.838 351.694 -132.697 451.748 0 0 0 2 lb
26.62 --416.25 345.746 -274.474 398.747 -132.697 451.748 0 0 0 2 lb
26.63 --416.25 345.746 -393.725 457.048 -371.2 568.349 0 0 0 2 lb
26.64 --132.697 451.748 -251.948 510.048 -371.2 568.349 0 0 0 2 lb
26.65 -670.264 274.195 629.188 409.347 588.113 544.499 0 0 0 2 lb
26.66 -670.264 274.195 797.466 341.771 924.667 409.347 0 0 0 2 lb
26.67 -588.113 544.499 756.39 476.923 924.667 409.347 0 0 0 2 lb
26.68 --689.204 -237.261 -614.799 -102.648 -567.302 43.6423 0 0 0 2 lb
26.69 --689.204 -237.261 -641.707 -90.9706 -567.302 43.6423 0 0 0 2 lb
26.70 +574.035 177.301 622.149 225.748 670.264 274.195 0 0 0 6.25356 lb
26.71 +694.579 115.483 682.421 194.839 670.264 274.195 0 0 0 6.25356 lb
26.72 +280.402 10.3938 246.402 -6.60595 212.403 -23.6057 0 0 0 6.25356 lb
26.73 +280.402 10.3938 283.493 -18.9695 286.584 -48.3327 0 0 0 6.25356 lb
26.74 +212.403 -23.6057 249.493 -35.9692 286.584 -48.3327 0 0 0 6.25356 lb
26.75 +286.584 -48.3327 326.765 -79.2414 366.947 -110.15 0 0 0 6.25356 lb
26.76 +286.584 -48.3327 278.857 -111.695 271.13 -175.058 0 0 0 6.25356 lb
26.77 +438.037 -88.514 417.946 -142.604 397.855 -196.694 0 0 0 6.25356 lb
26.78 +438.037 -88.514 402.492 -99.332 366.947 -110.15 0 0 0 6.25356 lb
26.79 +397.855 -196.694 382.401 -153.422 366.947 -110.15 0 0 0 6.25356 lb
26.80 +366.947 -110.15 319.038 -142.604 271.13 -175.058 0 0 0 6.25356 lb
26.81 +271.13 -175.058 274.221 -213.694 277.311 -252.33 0 0 0 6.25356 lb
26.82 +271.13 -175.058 238.675 -190.512 206.221 -205.967 0 0 0 6.25356 lb
26.83 +277.311 -252.33 241.766 -229.149 206.221 -205.967 0 0 0 6.25356 lb
26.84 +-840.856 -246.718 -804.351 -66.7145 -767.847 113.289 0 0 0 6.25356 lb
26.85 +-579.033 445.603 -673.44 279.446 -767.847 113.289 0 0 0 6.25356 lb
26.86 +-579.033 445.603 -524.906 302.104 -470.779 158.605 0 0 0 6.25356 lb
26.87 +-767.847 113.289 -619.313 135.947 -470.779 158.605 0 0 0 6.25356 lb
26.88 +906.312 201.403 946.592 42.798 986.873 -115.807 0 0 0 6.25356 lb
26.89 +906.312 201.403 834.562 91.8901 762.812 -17.6227 0 0 0 6.25356 lb
26.90 +986.873 -115.807 874.842 -66.7148 762.812 -17.6227 0 0 0 6.25356 lb
26.91 +-470.779 158.605 -390.218 50.3508 -309.657 -57.9033 0 0 0 6.25356 lb
26.92 +422.945 521.129 208.955 541.269 -5.03507 561.41 0 0 0 6.25356 lb
26.93 +422.945 521.129 376.371 417.911 329.797 314.692 0 0 0 6.25356 lb
26.94 +422.945 521.129 474.554 276.928 526.164 32.7279 0 0 0 6.25356 lb
26.95 +-5.03507 561.41 -36.5042 440.568 -67.9734 319.727 0 0 0 6.25356 lb
26.96 +329.797 314.692 130.912 317.209 -67.9734 319.727 0 0 0 6.25356 lb
26.97 +-67.9734 319.727 229.095 176.227 526.164 32.7279 0 0 0 6.25356 lb
26.98 +762.812 -17.6227 644.488 7.5526 526.164 32.7279 0 0 0 6.25356 lb
26.99 +762.812 -17.6227 746.448 -162.381 730.084 -307.139 0 0 0 6.25356 lb
26.100 +526.164 32.7279 470.779 -128.394 415.393 -289.516 0 0 0 6.25356 lb
26.101 +730.084 -307.139 572.738 -298.327 415.393 -289.516 0 0 0 6.25356 lb
26.102 +415.393 -289.516 173.71 -318.468 -67.9734 -347.42 0 0 0 6.25356 lb
26.103 +-67.9734 -347.42 -188.815 -202.662 -309.657 -57.9033 0 0 0 6.25356 lb
26.104 +-67.9734 -347.42 -195.758 -390.692 -323.543 -433.964 0 0 0 6.25356 lb
26.105 +-309.657 -57.9033 -424.775 -160.272 -539.894 -262.64 0 0 0 6.25356 lb
26.106 +-323.543 -433.964 -431.719 -348.302 -539.894 -262.64 0 0 0 6.25356 lb
26.107 +-26.6953 -19.9585 44.8558 -96.8093 116.407 -173.66 0 0 0 6.25356 lb
26.108 +-26.6953 -19.9585 87.2563 9.19185 201.208 38.3422 0 0 0 6.25356 lb
26.109 +-26.6953 -19.9585 -144.622 43.6422 -262.548 107.243 0 0 0 6.25356 lb
26.110 +-26.6953 -19.9585 -20.0703 56.8923 -13.4452 133.743 0 0 0 6.25356 lb
26.111 +116.407 -173.66 158.808 -67.6589 201.208 38.3422 0 0 0 6.25356 lb
26.112 +-262.548 107.243 -137.997 120.493 -13.4452 133.743 0 0 0 6.25356 lb
26.113 +-262.548 107.243 -221.472 176.144 -180.397 245.045 0 0 0 6.25356 lb
26.114 +-13.4452 133.743 -96.9211 189.394 -180.397 245.045 0 0 0 6.25356 lb
26.115 +-180.397 245.045 -113.509 338.465 -132.697 451.748 0 0 0 6.25356 lb
26.116 +-180.397 245.045 -199.585 358.328 -132.697 451.748 0 0 0 6.25356 lb
26.117 +-416.25 345.746 -274.474 398.747 -132.697 451.748 0 0 0 6.25356 lb
26.118 +-416.25 345.746 -393.725 457.048 -371.2 568.349 0 0 0 6.25356 lb
26.119 +-132.697 451.748 -251.948 510.048 -371.2 568.349 0 0 0 6.25356 lb
26.120 +670.264 274.195 629.188 409.347 588.113 544.499 0 0 0 6.25356 lb
26.121 +670.264 274.195 797.466 341.771 924.667 409.347 0 0 0 6.25356 lb
26.122 +588.113 544.499 756.39 476.923 924.667 409.347 0 0 0 6.25356 lb
26.123 +-689.204 -237.261 -587.735 -114.393 -567.302 43.6423 0 0 0 6.25356 lb
26.124 +-689.204 -237.261 -668.771 -79.2259 -567.302 43.6423 0 0 0 6.25356 lb
26.125 grestore
26.126 %Nodes:
26.127 gsave
26.128 --567.302 43.6423 20 0 0 0 nc
26.129 --689.204 -237.261 20 0 0 0 nc
26.130 -924.667 409.347 20 1 0 0 nc
26.131 -588.113 544.499 20 1 0 0 nc
26.132 -670.264 274.195 20 1 0 0 nc
26.133 --371.2 568.349 20 0 1 0 nc
26.134 --132.697 451.748 20 0 1 0 nc
26.135 --416.25 345.746 20 0 1 0 nc
26.136 --180.397 245.045 20 0 1 0 nc
26.137 --13.4452 133.743 20 0 1 0 nc
26.138 --262.548 107.243 20 0 1 0 nc
26.139 -201.208 38.3422 20 0 1 0 nc
26.140 -116.407 -173.66 20 0 1 0 nc
26.141 --26.6953 -19.9585 20 0 1 0 nc
26.142 --539.894 -262.64 20 0 0 1 nc
26.143 --323.543 -433.964 20 0 0 1 nc
26.144 --309.657 -57.9033 20 0 0 1 nc
26.145 --67.9734 -347.42 20 0 0 1 nc
26.146 -415.393 -289.516 20 0 0 1 nc
26.147 -730.084 -307.139 20 0 0 1 nc
26.148 -526.164 32.7279 20 0 0 1 nc
26.149 -762.812 -17.6227 20 0 0 1 nc
26.150 --67.9734 319.727 20 0 0 1 nc
26.151 -329.797 314.692 20 0 0 1 nc
26.152 --5.03507 561.41 20 0 0 1 nc
26.153 -422.945 521.129 20 0 0 1 nc
26.154 --470.779 158.605 20 0 0 1 nc
26.155 -986.873 -115.807 20 0 0 1 nc
26.156 -906.312 201.403 20 0 0 1 nc
26.157 --767.847 113.289 20 0 0 1 nc
26.158 --579.033 445.603 20 0 0 1 nc
26.159 --840.856 -246.718 20 0 0 1 nc
26.160 -206.221 -205.967 20 1 1 0 nc
26.161 -277.311 -252.33 20 1 1 0 nc
26.162 -271.13 -175.058 20 1 1 0 nc
26.163 -366.947 -110.15 20 1 1 0 nc
26.164 -397.855 -196.694 20 1 1 0 nc
26.165 -438.037 -88.514 20 1 1 0 nc
26.166 -286.584 -48.3327 20 1 1 0 nc
26.167 -212.403 -23.6057 20 1 1 0 nc
26.168 -280.402 10.3938 20 1 1 0 nc
26.169 -694.579 115.483 20 1 0 0 nc
26.170 -574.035 177.301 20 1 0 0 nc
26.171 +-567.302 43.6423 20.8452 0 0 0 nc
26.172 +-689.204 -237.261 20.8452 0 0 0 nc
26.173 +924.667 409.347 20.8452 1 0 0 nc
26.174 +588.113 544.499 20.8452 1 0 0 nc
26.175 +670.264 274.195 20.8452 1 0 0 nc
26.176 +-371.2 568.349 20.8452 0 1 0 nc
26.177 +-132.697 451.748 20.8452 0 1 0 nc
26.178 +-416.25 345.746 20.8452 0 1 0 nc
26.179 +-180.397 245.045 20.8452 0 1 0 nc
26.180 +-13.4452 133.743 20.8452 0 1 0 nc
26.181 +-262.548 107.243 20.8452 0 1 0 nc
26.182 +201.208 38.3422 20.8452 0 1 0 nc
26.183 +116.407 -173.66 20.8452 0 1 0 nc
26.184 +-26.6953 -19.9585 20.8452 0 1 0 nc
26.185 +-539.894 -262.64 20.8452 0 0 1 nc
26.186 +-323.543 -433.964 20.8452 0 0 1 nc
26.187 +-309.657 -57.9033 20.8452 0 0 1 nc
26.188 +-67.9734 -347.42 20.8452 0 0 1 nc
26.189 +415.393 -289.516 20.8452 0 0 1 nc
26.190 +730.084 -307.139 20.8452 0 0 1 nc
26.191 +526.164 32.7279 20.8452 0 0 1 nc
26.192 +762.812 -17.6227 20.8452 0 0 1 nc
26.193 +-67.9734 319.727 20.8452 0 0 1 nc
26.194 +329.797 314.692 20.8452 0 0 1 nc
26.195 +-5.03507 561.41 20.8452 0 0 1 nc
26.196 +422.945 521.129 20.8452 0 0 1 nc
26.197 +-470.779 158.605 20.8452 0 0 1 nc
26.198 +986.873 -115.807 20.8452 0 0 1 nc
26.199 +906.312 201.403 20.8452 0 0 1 nc
26.200 +-767.847 113.289 20.8452 0 0 1 nc
26.201 +-579.033 445.603 20.8452 0 0 1 nc
26.202 +-840.856 -246.718 20.8452 0 0 1 nc
26.203 +206.221 -205.967 20.8452 1 1 0 nc
26.204 +277.311 -252.33 20.8452 1 1 0 nc
26.205 +271.13 -175.058 20.8452 1 1 0 nc
26.206 +366.947 -110.15 20.8452 1 1 0 nc
26.207 +397.855 -196.694 20.8452 1 1 0 nc
26.208 +438.037 -88.514 20.8452 1 1 0 nc
26.209 +286.584 -48.3327 20.8452 1 1 0 nc
26.210 +212.403 -23.6057 20.8452 1 1 0 nc
26.211 +280.402 10.3938 20.8452 1 1 0 nc
26.212 +694.579 115.483 20.8452 1 0 0 nc
26.213 +574.035 177.301 20.8452 1 0 0 nc
26.214 grestore
26.215 grestore
26.216 showpage
27.1 --- a/doc/images/edge_biconnected_components.eps Mon Jul 16 16:21:40 2018 +0200
27.2 +++ b/doc/images/edge_biconnected_components.eps Wed Oct 17 19:14:07 2018 +0200
27.3 @@ -1,6 +1,6 @@
27.4 %!PS-Adobe-2.0 EPSF-2.0
27.5 %%Creator: LEMON, graphToEps()
27.6 -%%CreationDate: Fri Nov 4 13:47:12 2005
27.7 +%%CreationDate: Fri Mar 8 00:18:43 2013
27.8 %%BoundingBox: 0 0 842 596
27.9 %%EndComments
27.10 /lb { setlinewidth setrgbcolor newpath moveto
27.11 @@ -53,107 +53,107 @@
27.12 860.856 -588.349 translate
27.13 %Edges:
27.14 gsave
27.15 -574.035 177.301 622.149 225.748 670.264 274.195 1 0 0 2 lb
27.16 -694.579 115.483 682.421 194.839 670.264 274.195 1 0 0 2 lb
27.17 -280.402 10.3938 246.402 -6.60595 212.403 -23.6057 0 0 1 2 lb
27.18 -280.402 10.3938 283.493 -18.9695 286.584 -48.3327 0 0 1 2 lb
27.19 -212.403 -23.6057 249.493 -35.9692 286.584 -48.3327 0 0 1 2 lb
27.20 -286.584 -48.3327 326.765 -79.2414 366.947 -110.15 0 0 1 2 lb
27.21 -286.584 -48.3327 278.857 -111.695 271.13 -175.058 0 0 1 2 lb
27.22 -438.037 -88.514 417.946 -142.604 397.855 -196.694 0 0 1 2 lb
27.23 -438.037 -88.514 402.492 -99.332 366.947 -110.15 0 0 1 2 lb
27.24 -397.855 -196.694 382.401 -153.422 366.947 -110.15 0 0 1 2 lb
27.25 -366.947 -110.15 319.038 -142.604 271.13 -175.058 0 0 1 2 lb
27.26 -271.13 -175.058 274.221 -213.694 277.311 -252.33 0 0 1 2 lb
27.27 -271.13 -175.058 238.675 -190.512 206.221 -205.967 0 0 1 2 lb
27.28 -277.311 -252.33 241.766 -229.149 206.221 -205.967 0 0 1 2 lb
27.29 --840.856 -246.718 -804.351 -66.7145 -767.847 113.289 1 0 0 2 lb
27.30 --579.033 445.603 -673.44 279.446 -767.847 113.289 0 0 1 2 lb
27.31 --579.033 445.603 -524.906 302.104 -470.779 158.605 0 0 1 2 lb
27.32 --767.847 113.289 -619.313 135.947 -470.779 158.605 0 0 1 2 lb
27.33 -906.312 201.403 946.592 42.798 986.873 -115.807 0 0 1 2 lb
27.34 -906.312 201.403 834.562 91.8901 762.812 -17.6227 0 0 1 2 lb
27.35 -986.873 -115.807 874.842 -66.7148 762.812 -17.6227 0 0 1 2 lb
27.36 --470.779 158.605 -390.218 50.3508 -309.657 -57.9033 1 0 0 2 lb
27.37 -422.945 521.129 208.955 541.269 -5.03507 561.41 0 0 1 2 lb
27.38 -422.945 521.129 376.371 417.911 329.797 314.692 0 0 1 2 lb
27.39 -422.945 521.129 474.554 276.928 526.164 32.7279 0 0 1 2 lb
27.40 --5.03507 561.41 -36.5042 440.568 -67.9734 319.727 0 0 1 2 lb
27.41 -329.797 314.692 130.912 317.209 -67.9734 319.727 0 0 1 2 lb
27.42 --67.9734 319.727 229.095 176.227 526.164 32.7279 0 0 1 2 lb
27.43 -762.812 -17.6227 644.488 7.5526 526.164 32.7279 0 0 1 2 lb
27.44 -762.812 -17.6227 746.448 -162.381 730.084 -307.139 0 0 1 2 lb
27.45 -526.164 32.7279 470.779 -128.394 415.393 -289.516 0 0 1 2 lb
27.46 -730.084 -307.139 572.738 -298.327 415.393 -289.516 0 0 1 2 lb
27.47 -415.393 -289.516 173.71 -318.468 -67.9734 -347.42 1 0 0 2 lb
27.48 --67.9734 -347.42 -188.815 -202.662 -309.657 -57.9033 0 0 1 2 lb
27.49 --67.9734 -347.42 -195.758 -390.692 -323.543 -433.964 0 0 1 2 lb
27.50 --309.657 -57.9033 -424.775 -160.272 -539.894 -262.64 0 0 1 2 lb
27.51 --323.543 -433.964 -431.719 -348.302 -539.894 -262.64 0 0 1 2 lb
27.52 --26.6953 -19.9585 44.8558 -96.8093 116.407 -173.66 0 0 1 2 lb
27.53 --26.6953 -19.9585 87.2563 9.19185 201.208 38.3422 0 0 1 2 lb
27.54 --26.6953 -19.9585 -144.622 43.6422 -262.548 107.243 0 0 1 2 lb
27.55 --26.6953 -19.9585 -20.0703 56.8923 -13.4452 133.743 0 0 1 2 lb
27.56 -116.407 -173.66 158.808 -67.6589 201.208 38.3422 0 0 1 2 lb
27.57 --262.548 107.243 -137.997 120.493 -13.4452 133.743 0 0 1 2 lb
27.58 --262.548 107.243 -221.472 176.144 -180.397 245.045 0 0 1 2 lb
27.59 --13.4452 133.743 -96.9211 189.394 -180.397 245.045 0 0 1 2 lb
27.60 --180.397 245.045 -142.256 345.099 -132.697 451.748 0 0 1 2 lb
27.61 --180.397 245.045 -170.838 351.694 -132.697 451.748 0 0 1 2 lb
27.62 --416.25 345.746 -274.474 398.747 -132.697 451.748 0 0 1 2 lb
27.63 --416.25 345.746 -393.725 457.048 -371.2 568.349 0 0 1 2 lb
27.64 --132.697 451.748 -251.948 510.048 -371.2 568.349 0 0 1 2 lb
27.65 -670.264 274.195 629.188 409.347 588.113 544.499 0 0 1 2 lb
27.66 -670.264 274.195 797.466 341.771 924.667 409.347 0 0 1 2 lb
27.67 -588.113 544.499 756.39 476.923 924.667 409.347 0 0 1 2 lb
27.68 --689.204 -237.261 -614.799 -102.648 -567.302 43.6423 0 0 1 2 lb
27.69 --689.204 -237.261 -641.707 -90.9706 -567.302 43.6423 0 0 1 2 lb
27.70 +574.035 177.301 622.149 225.748 670.264 274.195 1 0 0 6.25356 lb
27.71 +694.579 115.483 682.421 194.839 670.264 274.195 1 0 0 6.25356 lb
27.72 +280.402 10.3938 246.402 -6.60595 212.403 -23.6057 0 0 1 6.25356 lb
27.73 +280.402 10.3938 283.493 -18.9695 286.584 -48.3327 0 0 1 6.25356 lb
27.74 +212.403 -23.6057 249.493 -35.9692 286.584 -48.3327 0 0 1 6.25356 lb
27.75 +286.584 -48.3327 326.765 -79.2414 366.947 -110.15 0 0 1 6.25356 lb
27.76 +286.584 -48.3327 278.857 -111.695 271.13 -175.058 0 0 1 6.25356 lb
27.77 +438.037 -88.514 417.946 -142.604 397.855 -196.694 0 0 1 6.25356 lb
27.78 +438.037 -88.514 402.492 -99.332 366.947 -110.15 0 0 1 6.25356 lb
27.79 +397.855 -196.694 382.401 -153.422 366.947 -110.15 0 0 1 6.25356 lb
27.80 +366.947 -110.15 319.038 -142.604 271.13 -175.058 0 0 1 6.25356 lb
27.81 +271.13 -175.058 274.221 -213.694 277.311 -252.33 0 0 1 6.25356 lb
27.82 +271.13 -175.058 238.675 -190.512 206.221 -205.967 0 0 1 6.25356 lb
27.83 +277.311 -252.33 241.766 -229.149 206.221 -205.967 0 0 1 6.25356 lb
27.84 +-840.856 -246.718 -804.351 -66.7145 -767.847 113.289 1 0 0 6.25356 lb
27.85 +-579.033 445.603 -673.44 279.446 -767.847 113.289 0 0 1 6.25356 lb
27.86 +-579.033 445.603 -524.906 302.104 -470.779 158.605 0 0 1 6.25356 lb
27.87 +-767.847 113.289 -619.313 135.947 -470.779 158.605 0 0 1 6.25356 lb
27.88 +906.312 201.403 946.592 42.798 986.873 -115.807 0 0 1 6.25356 lb
27.89 +906.312 201.403 834.562 91.8901 762.812 -17.6227 0 0 1 6.25356 lb
27.90 +986.873 -115.807 874.842 -66.7148 762.812 -17.6227 0 0 1 6.25356 lb
27.91 +-470.779 158.605 -390.218 50.3508 -309.657 -57.9033 1 0 0 6.25356 lb
27.92 +422.945 521.129 208.955 541.269 -5.03507 561.41 0 0 1 6.25356 lb
27.93 +422.945 521.129 376.371 417.911 329.797 314.692 0 0 1 6.25356 lb
27.94 +422.945 521.129 474.554 276.928 526.164 32.7279 0 0 1 6.25356 lb
27.95 +-5.03507 561.41 -36.5042 440.568 -67.9734 319.727 0 0 1 6.25356 lb
27.96 +329.797 314.692 130.912 317.209 -67.9734 319.727 0 0 1 6.25356 lb
27.97 +-67.9734 319.727 229.095 176.227 526.164 32.7279 0 0 1 6.25356 lb
27.98 +762.812 -17.6227 644.488 7.5526 526.164 32.7279 0 0 1 6.25356 lb
27.99 +762.812 -17.6227 746.448 -162.381 730.084 -307.139 0 0 1 6.25356 lb
27.100 +526.164 32.7279 470.779 -128.394 415.393 -289.516 0 0 1 6.25356 lb
27.101 +730.084 -307.139 572.738 -298.327 415.393 -289.516 0 0 1 6.25356 lb
27.102 +415.393 -289.516 173.71 -318.468 -67.9734 -347.42 1 0 0 6.25356 lb
27.103 +-67.9734 -347.42 -188.815 -202.662 -309.657 -57.9033 0 0 1 6.25356 lb
27.104 +-67.9734 -347.42 -195.758 -390.692 -323.543 -433.964 0 0 1 6.25356 lb
27.105 +-309.657 -57.9033 -424.775 -160.272 -539.894 -262.64 0 0 1 6.25356 lb
27.106 +-323.543 -433.964 -431.719 -348.302 -539.894 -262.64 0 0 1 6.25356 lb
27.107 +-26.6953 -19.9585 44.8558 -96.8093 116.407 -173.66 0 0 1 6.25356 lb
27.108 +-26.6953 -19.9585 87.2563 9.19185 201.208 38.3422 0 0 1 6.25356 lb
27.109 +-26.6953 -19.9585 -144.622 43.6422 -262.548 107.243 0 0 1 6.25356 lb
27.110 +-26.6953 -19.9585 -20.0703 56.8923 -13.4452 133.743 0 0 1 6.25356 lb
27.111 +116.407 -173.66 158.808 -67.6589 201.208 38.3422 0 0 1 6.25356 lb
27.112 +-262.548 107.243 -137.997 120.493 -13.4452 133.743 0 0 1 6.25356 lb
27.113 +-262.548 107.243 -221.472 176.144 -180.397 245.045 0 0 1 6.25356 lb
27.114 +-13.4452 133.743 -96.9211 189.394 -180.397 245.045 0 0 1 6.25356 lb
27.115 +-180.397 245.045 -113.509 338.465 -132.697 451.748 0 0 1 6.25356 lb
27.116 +-180.397 245.045 -199.585 358.328 -132.697 451.748 0 0 1 6.25356 lb
27.117 +-416.25 345.746 -274.474 398.747 -132.697 451.748 0 0 1 6.25356 lb
27.118 +-416.25 345.746 -393.725 457.048 -371.2 568.349 0 0 1 6.25356 lb
27.119 +-132.697 451.748 -251.948 510.048 -371.2 568.349 0 0 1 6.25356 lb
27.120 +670.264 274.195 629.188 409.347 588.113 544.499 0 0 1 6.25356 lb
27.121 +670.264 274.195 797.466 341.771 924.667 409.347 0 0 1 6.25356 lb
27.122 +588.113 544.499 756.39 476.923 924.667 409.347 0 0 1 6.25356 lb
27.123 +-689.204 -237.261 -587.735 -114.393 -567.302 43.6423 0 0 1 6.25356 lb
27.124 +-689.204 -237.261 -668.771 -79.2259 -567.302 43.6423 0 0 1 6.25356 lb
27.125 grestore
27.126 %Nodes:
27.127 gsave
27.128 --567.302 43.6423 20 0 0 0 nc
27.129 --689.204 -237.261 20 0 0 0 nc
27.130 -924.667 409.347 20 0 0 1 nc
27.131 -588.113 544.499 20 0 0 1 nc
27.132 -670.264 274.195 20 0 0 1 nc
27.133 --371.2 568.349 20 1 1 0 nc
27.134 --132.697 451.748 20 1 1 0 nc
27.135 --416.25 345.746 20 1 1 0 nc
27.136 --180.397 245.045 20 1 1 0 nc
27.137 --13.4452 133.743 20 1 1 0 nc
27.138 --262.548 107.243 20 1 1 0 nc
27.139 -201.208 38.3422 20 1 1 0 nc
27.140 -116.407 -173.66 20 1 1 0 nc
27.141 --26.6953 -19.9585 20 1 1 0 nc
27.142 --539.894 -262.64 20 0 0.5 0 nc
27.143 --323.543 -433.964 20 0 0.5 0 nc
27.144 --309.657 -57.9033 20 0 0.5 0 nc
27.145 --67.9734 -347.42 20 0 0.5 0 nc
27.146 -415.393 -289.516 20 0.5 0 0 nc
27.147 -730.084 -307.139 20 0.5 0 0 nc
27.148 -526.164 32.7279 20 0.5 0 0 nc
27.149 -762.812 -17.6227 20 0.5 0 0 nc
27.150 --67.9734 319.727 20 0.5 0 0 nc
27.151 -329.797 314.692 20 0.5 0 0 nc
27.152 --5.03507 561.41 20 0.5 0 0 nc
27.153 -422.945 521.129 20 0.5 0 0 nc
27.154 --470.779 158.605 20 0 1 1 nc
27.155 -986.873 -115.807 20 0.5 0 0 nc
27.156 -906.312 201.403 20 0.5 0 0 nc
27.157 --767.847 113.289 20 0 1 1 nc
27.158 --579.033 445.603 20 0 1 1 nc
27.159 --840.856 -246.718 20 1 0 1 nc
27.160 -206.221 -205.967 20 0 0 0.5 nc
27.161 -277.311 -252.33 20 0 0 0.5 nc
27.162 -271.13 -175.058 20 0 0 0.5 nc
27.163 -366.947 -110.15 20 0 0 0.5 nc
27.164 -397.855 -196.694 20 0 0 0.5 nc
27.165 -438.037 -88.514 20 0 0 0.5 nc
27.166 -286.584 -48.3327 20 0 0 0.5 nc
27.167 -212.403 -23.6057 20 0 0 0.5 nc
27.168 -280.402 10.3938 20 0 0 0.5 nc
27.169 -694.579 115.483 20 1 0 0 nc
27.170 -574.035 177.301 20 0 1 0 nc
27.171 +-567.302 43.6423 20.8452 0 0 0 nc
27.172 +-689.204 -237.261 20.8452 0 0 0 nc
27.173 +924.667 409.347 20.8452 0 0 1 nc
27.174 +588.113 544.499 20.8452 0 0 1 nc
27.175 +670.264 274.195 20.8452 0 0 1 nc
27.176 +-371.2 568.349 20.8452 1 1 0 nc
27.177 +-132.697 451.748 20.8452 1 1 0 nc
27.178 +-416.25 345.746 20.8452 1 1 0 nc
27.179 +-180.397 245.045 20.8452 1 1 0 nc
27.180 +-13.4452 133.743 20.8452 1 1 0 nc
27.181 +-262.548 107.243 20.8452 1 1 0 nc
27.182 +201.208 38.3422 20.8452 1 1 0 nc
27.183 +116.407 -173.66 20.8452 1 1 0 nc
27.184 +-26.6953 -19.9585 20.8452 1 1 0 nc
27.185 +-539.894 -262.64 20.8452 0 0.5 0 nc
27.186 +-323.543 -433.964 20.8452 0 0.5 0 nc
27.187 +-309.657 -57.9033 20.8452 0 0.5 0 nc
27.188 +-67.9734 -347.42 20.8452 0 0.5 0 nc
27.189 +415.393 -289.516 20.8452 0.5 0 0 nc
27.190 +730.084 -307.139 20.8452 0.5 0 0 nc
27.191 +526.164 32.7279 20.8452 0.5 0 0 nc
27.192 +762.812 -17.6227 20.8452 0.5 0 0 nc
27.193 +-67.9734 319.727 20.8452 0.5 0 0 nc
27.194 +329.797 314.692 20.8452 0.5 0 0 nc
27.195 +-5.03507 561.41 20.8452 0.5 0 0 nc
27.196 +422.945 521.129 20.8452 0.5 0 0 nc
27.197 +-470.779 158.605 20.8452 0 1 1 nc
27.198 +986.873 -115.807 20.8452 0.5 0 0 nc
27.199 +906.312 201.403 20.8452 0.5 0 0 nc
27.200 +-767.847 113.289 20.8452 0 1 1 nc
27.201 +-579.033 445.603 20.8452 0 1 1 nc
27.202 +-840.856 -246.718 20.8452 1 0 1 nc
27.203 +206.221 -205.967 20.8452 0 0 0.5 nc
27.204 +277.311 -252.33 20.8452 0 0 0.5 nc
27.205 +271.13 -175.058 20.8452 0 0 0.5 nc
27.206 +366.947 -110.15 20.8452 0 0 0.5 nc
27.207 +397.855 -196.694 20.8452 0 0 0.5 nc
27.208 +438.037 -88.514 20.8452 0 0 0.5 nc
27.209 +286.584 -48.3327 20.8452 0 0 0.5 nc
27.210 +212.403 -23.6057 20.8452 0 0 0.5 nc
27.211 +280.402 10.3938 20.8452 0 0 0.5 nc
27.212 +694.579 115.483 20.8452 1 0 0 nc
27.213 +574.035 177.301 20.8452 0 1 0 nc
27.214 grestore
27.215 grestore
27.216 showpage
28.1 Binary file doc/images/graph_to_eps.png has changed
29.1 --- a/doc/images/node_biconnected_components.eps Mon Jul 16 16:21:40 2018 +0200
29.2 +++ b/doc/images/node_biconnected_components.eps Wed Oct 17 19:14:07 2018 +0200
29.3 @@ -1,6 +1,6 @@
29.4 %!PS-Adobe-2.0 EPSF-2.0
29.5 %%Creator: LEMON, graphToEps()
29.6 -%%CreationDate: Fri Nov 4 13:47:12 2005
29.7 +%%CreationDate: Fri Mar 8 00:18:43 2013
29.8 %%BoundingBox: 0 0 842 596
29.9 %%EndComments
29.10 /lb { setlinewidth setrgbcolor newpath moveto
29.11 @@ -53,107 +53,107 @@
29.12 860.856 -588.349 translate
29.13 %Edges:
29.14 gsave
29.15 -574.035 177.301 622.149 225.748 670.264 274.195 0 1 0 5 lb
29.16 -694.579 115.483 682.421 194.839 670.264 274.195 1 0 0 5 lb
29.17 -280.402 10.3938 246.402 -6.60595 212.403 -23.6057 1 1 0.5 5 lb
29.18 -280.402 10.3938 283.493 -18.9695 286.584 -48.3327 1 1 0.5 5 lb
29.19 -212.403 -23.6057 249.493 -35.9692 286.584 -48.3327 1 1 0.5 5 lb
29.20 -286.584 -48.3327 326.765 -79.2414 366.947 -110.15 1 0.5 1 5 lb
29.21 -286.584 -48.3327 278.857 -111.695 271.13 -175.058 1 0.5 1 5 lb
29.22 -438.037 -88.514 417.946 -142.604 397.855 -196.694 0.5 0.5 1 5 lb
29.23 -438.037 -88.514 402.492 -99.332 366.947 -110.15 0.5 0.5 1 5 lb
29.24 -397.855 -196.694 382.401 -153.422 366.947 -110.15 0.5 0.5 1 5 lb
29.25 -366.947 -110.15 319.038 -142.604 271.13 -175.058 1 0.5 1 5 lb
29.26 -271.13 -175.058 274.221 -213.694 277.311 -252.33 0.5 1 1 5 lb
29.27 -271.13 -175.058 238.675 -190.512 206.221 -205.967 0.5 1 1 5 lb
29.28 -277.311 -252.33 241.766 -229.149 206.221 -205.967 0.5 1 1 5 lb
29.29 --840.856 -246.718 -804.351 -66.7145 -767.847 113.289 0 0.5 0 5 lb
29.30 --579.033 445.603 -673.44 279.446 -767.847 113.289 0 0 0.5 5 lb
29.31 --579.033 445.603 -524.906 302.104 -470.779 158.605 0 0 0.5 5 lb
29.32 --767.847 113.289 -619.313 135.947 -470.779 158.605 0 0 0.5 5 lb
29.33 -906.312 201.403 946.592 42.798 986.873 -115.807 0 0.5 0.5 5 lb
29.34 -906.312 201.403 834.562 91.8901 762.812 -17.6227 0 0.5 0.5 5 lb
29.35 -986.873 -115.807 874.842 -66.7148 762.812 -17.6227 0 0.5 0.5 5 lb
29.36 --470.779 158.605 -390.218 50.3508 -309.657 -57.9033 0.5 0.5 0 5 lb
29.37 -422.945 521.129 208.955 541.269 -5.03507 561.41 0.5 0 0.5 5 lb
29.38 -422.945 521.129 376.371 417.911 329.797 314.692 0.5 0 0.5 5 lb
29.39 -422.945 521.129 474.554 276.928 526.164 32.7279 0.5 0 0.5 5 lb
29.40 --5.03507 561.41 -36.5042 440.568 -67.9734 319.727 0.5 0 0.5 5 lb
29.41 -329.797 314.692 130.912 317.209 -67.9734 319.727 0.5 0 0.5 5 lb
29.42 --67.9734 319.727 229.095 176.227 526.164 32.7279 0.5 0 0.5 5 lb
29.43 -762.812 -17.6227 644.488 7.5526 526.164 32.7279 0.5 0.5 0.5 5 lb
29.44 -762.812 -17.6227 746.448 -162.381 730.084 -307.139 0.5 0.5 0.5 5 lb
29.45 -526.164 32.7279 470.779 -128.394 415.393 -289.516 0.5 0.5 0.5 5 lb
29.46 -730.084 -307.139 572.738 -298.327 415.393 -289.516 0.5 0.5 0.5 5 lb
29.47 -415.393 -289.516 173.71 -318.468 -67.9734 -347.42 1 0.5 0.5 5 lb
29.48 --67.9734 -347.42 -188.815 -202.662 -309.657 -57.9033 0.5 1 0.5 5 lb
29.49 --67.9734 -347.42 -195.758 -390.692 -323.543 -433.964 0.5 1 0.5 5 lb
29.50 --309.657 -57.9033 -424.775 -160.272 -539.894 -262.64 0.5 1 0.5 5 lb
29.51 --323.543 -433.964 -431.719 -348.302 -539.894 -262.64 0.5 1 0.5 5 lb
29.52 --26.6953 -19.9585 44.8558 -96.8093 116.407 -173.66 1 1 0 5 lb
29.53 --26.6953 -19.9585 87.2563 9.19185 201.208 38.3422 1 1 0 5 lb
29.54 --26.6953 -19.9585 -144.622 43.6422 -262.548 107.243 1 0 1 5 lb
29.55 --26.6953 -19.9585 -20.0703 56.8923 -13.4452 133.743 1 0 1 5 lb
29.56 -116.407 -173.66 158.808 -67.6589 201.208 38.3422 1 1 0 5 lb
29.57 --262.548 107.243 -137.997 120.493 -13.4452 133.743 1 0 1 5 lb
29.58 --262.548 107.243 -221.472 176.144 -180.397 245.045 1 0 1 5 lb
29.59 --13.4452 133.743 -96.9211 189.394 -180.397 245.045 1 0 1 5 lb
29.60 --180.397 245.045 -140.307 344.649 -132.697 451.748 0 1 1 5 lb
29.61 --180.397 245.045 -172.787 352.144 -132.697 451.748 0 1 1 5 lb
29.62 --416.25 345.746 -274.474 398.747 -132.697 451.748 0.5 0 0 5 lb
29.63 --416.25 345.746 -393.725 457.048 -371.2 568.349 0.5 0 0 5 lb
29.64 --132.697 451.748 -251.948 510.048 -371.2 568.349 0.5 0 0 5 lb
29.65 -670.264 274.195 629.188 409.347 588.113 544.499 0 0 1 5 lb
29.66 -670.264 274.195 797.466 341.771 924.667 409.347 0 0 1 5 lb
29.67 -588.113 544.499 756.39 476.923 924.667 409.347 0 0 1 5 lb
29.68 --689.204 -237.261 -612.964 -103.444 -567.302 43.6423 0 0 0 5 lb
29.69 --689.204 -237.261 -643.542 -90.1744 -567.302 43.6423 0 0 0 5 lb
29.70 +574.035 177.301 622.149 225.748 670.264 274.195 0 1 0 6.25356 lb
29.71 +694.579 115.483 682.421 194.839 670.264 274.195 1 0 0 6.25356 lb
29.72 +280.402 10.3938 246.402 -6.60595 212.403 -23.6057 1 1 0.5 6.25356 lb
29.73 +280.402 10.3938 283.493 -18.9695 286.584 -48.3327 1 1 0.5 6.25356 lb
29.74 +212.403 -23.6057 249.493 -35.9692 286.584 -48.3327 1 1 0.5 6.25356 lb
29.75 +286.584 -48.3327 326.765 -79.2414 366.947 -110.15 1 0.5 1 6.25356 lb
29.76 +286.584 -48.3327 278.857 -111.695 271.13 -175.058 1 0.5 1 6.25356 lb
29.77 +438.037 -88.514 417.946 -142.604 397.855 -196.694 0.5 0.5 1 6.25356 lb
29.78 +438.037 -88.514 402.492 -99.332 366.947 -110.15 0.5 0.5 1 6.25356 lb
29.79 +397.855 -196.694 382.401 -153.422 366.947 -110.15 0.5 0.5 1 6.25356 lb
29.80 +366.947 -110.15 319.038 -142.604 271.13 -175.058 1 0.5 1 6.25356 lb
29.81 +271.13 -175.058 274.221 -213.694 277.311 -252.33 0.5 1 1 6.25356 lb
29.82 +271.13 -175.058 238.675 -190.512 206.221 -205.967 0.5 1 1 6.25356 lb
29.83 +277.311 -252.33 241.766 -229.149 206.221 -205.967 0.5 1 1 6.25356 lb
29.84 +-840.856 -246.718 -804.351 -66.7145 -767.847 113.289 0 0.5 0 6.25356 lb
29.85 +-579.033 445.603 -673.44 279.446 -767.847 113.289 0 0 0.5 6.25356 lb
29.86 +-579.033 445.603 -524.906 302.104 -470.779 158.605 0 0 0.5 6.25356 lb
29.87 +-767.847 113.289 -619.313 135.947 -470.779 158.605 0 0 0.5 6.25356 lb
29.88 +906.312 201.403 946.592 42.798 986.873 -115.807 0 0.5 0.5 6.25356 lb
29.89 +906.312 201.403 834.562 91.8901 762.812 -17.6227 0 0.5 0.5 6.25356 lb
29.90 +986.873 -115.807 874.842 -66.7148 762.812 -17.6227 0 0.5 0.5 6.25356 lb
29.91 +-470.779 158.605 -390.218 50.3508 -309.657 -57.9033 0.5 0.5 0 6.25356 lb
29.92 +422.945 521.129 208.955 541.269 -5.03507 561.41 0.5 0 0.5 6.25356 lb
29.93 +422.945 521.129 376.371 417.911 329.797 314.692 0.5 0 0.5 6.25356 lb
29.94 +422.945 521.129 474.554 276.928 526.164 32.7279 0.5 0 0.5 6.25356 lb
29.95 +-5.03507 561.41 -36.5042 440.568 -67.9734 319.727 0.5 0 0.5 6.25356 lb
29.96 +329.797 314.692 130.912 317.209 -67.9734 319.727 0.5 0 0.5 6.25356 lb
29.97 +-67.9734 319.727 229.095 176.227 526.164 32.7279 0.5 0 0.5 6.25356 lb
29.98 +762.812 -17.6227 644.488 7.5526 526.164 32.7279 0.5 0.5 0.5 6.25356 lb
29.99 +762.812 -17.6227 746.448 -162.381 730.084 -307.139 0.5 0.5 0.5 6.25356 lb
29.100 +526.164 32.7279 470.779 -128.394 415.393 -289.516 0.5 0.5 0.5 6.25356 lb
29.101 +730.084 -307.139 572.738 -298.327 415.393 -289.516 0.5 0.5 0.5 6.25356 lb
29.102 +415.393 -289.516 173.71 -318.468 -67.9734 -347.42 1 0.5 0.5 6.25356 lb
29.103 +-67.9734 -347.42 -188.815 -202.662 -309.657 -57.9033 0.5 1 0.5 6.25356 lb
29.104 +-67.9734 -347.42 -195.758 -390.692 -323.543 -433.964 0.5 1 0.5 6.25356 lb
29.105 +-309.657 -57.9033 -424.775 -160.272 -539.894 -262.64 0.5 1 0.5 6.25356 lb
29.106 +-323.543 -433.964 -431.719 -348.302 -539.894 -262.64 0.5 1 0.5 6.25356 lb
29.107 +-26.6953 -19.9585 44.8558 -96.8093 116.407 -173.66 1 1 0 6.25356 lb
29.108 +-26.6953 -19.9585 87.2563 9.19185 201.208 38.3422 1 1 0 6.25356 lb
29.109 +-26.6953 -19.9585 -144.622 43.6422 -262.548 107.243 1 0 1 6.25356 lb
29.110 +-26.6953 -19.9585 -20.0703 56.8923 -13.4452 133.743 1 0 1 6.25356 lb
29.111 +116.407 -173.66 158.808 -67.6589 201.208 38.3422 1 1 0 6.25356 lb
29.112 +-262.548 107.243 -137.997 120.493 -13.4452 133.743 1 0 1 6.25356 lb
29.113 +-262.548 107.243 -221.472 176.144 -180.397 245.045 1 0 1 6.25356 lb
29.114 +-13.4452 133.743 -96.9211 189.394 -180.397 245.045 1 0 1 6.25356 lb
29.115 +-180.397 245.045 -113.509 338.465 -132.697 451.748 0 1 1 6.25356 lb
29.116 +-180.397 245.045 -199.585 358.328 -132.697 451.748 0 1 1 6.25356 lb
29.117 +-416.25 345.746 -274.474 398.747 -132.697 451.748 0.5 0 0 6.25356 lb
29.118 +-416.25 345.746 -393.725 457.048 -371.2 568.349 0.5 0 0 6.25356 lb
29.119 +-132.697 451.748 -251.948 510.048 -371.2 568.349 0.5 0 0 6.25356 lb
29.120 +670.264 274.195 629.188 409.347 588.113 544.499 0 0 1 6.25356 lb
29.121 +670.264 274.195 797.466 341.771 924.667 409.347 0 0 1 6.25356 lb
29.122 +588.113 544.499 756.39 476.923 924.667 409.347 0 0 1 6.25356 lb
29.123 +-689.204 -237.261 -587.735 -114.393 -567.302 43.6423 0 0 0 6.25356 lb
29.124 +-689.204 -237.261 -668.771 -79.2259 -567.302 43.6423 0 0 0 6.25356 lb
29.125 grestore
29.126 %Nodes:
29.127 gsave
29.128 --567.302 43.6423 20 0 0 1 nc
29.129 --689.204 -237.261 20 0 0 1 nc
29.130 -924.667 409.347 20 0 0 1 nc
29.131 -588.113 544.499 20 0 0 1 nc
29.132 -670.264 274.195 20 1 0 0 nc
29.133 --371.2 568.349 20 0 0 1 nc
29.134 --132.697 451.748 20 1 0 0 nc
29.135 --416.25 345.746 20 0 0 1 nc
29.136 --180.397 245.045 20 1 0 0 nc
29.137 --13.4452 133.743 20 0 0 1 nc
29.138 --262.548 107.243 20 0 0 1 nc
29.139 -201.208 38.3422 20 0 0 1 nc
29.140 -116.407 -173.66 20 0 0 1 nc
29.141 --26.6953 -19.9585 20 1 0 0 nc
29.142 --539.894 -262.64 20 0 0 1 nc
29.143 --323.543 -433.964 20 0 0 1 nc
29.144 --309.657 -57.9033 20 1 0 0 nc
29.145 --67.9734 -347.42 20 1 0 0 nc
29.146 -415.393 -289.516 20 1 0 0 nc
29.147 -730.084 -307.139 20 0 0 1 nc
29.148 -526.164 32.7279 20 1 0 0 nc
29.149 -762.812 -17.6227 20 1 0 0 nc
29.150 --67.9734 319.727 20 0 0 1 nc
29.151 -329.797 314.692 20 0 0 1 nc
29.152 --5.03507 561.41 20 0 0 1 nc
29.153 -422.945 521.129 20 0 0 1 nc
29.154 --470.779 158.605 20 1 0 0 nc
29.155 -986.873 -115.807 20 0 0 1 nc
29.156 -906.312 201.403 20 0 0 1 nc
29.157 --767.847 113.289 20 1 0 0 nc
29.158 --579.033 445.603 20 0 0 1 nc
29.159 --840.856 -246.718 20 0 0 1 nc
29.160 -206.221 -205.967 20 0 0 1 nc
29.161 -277.311 -252.33 20 0 0 1 nc
29.162 -271.13 -175.058 20 1 0 0 nc
29.163 -366.947 -110.15 20 1 0 0 nc
29.164 -397.855 -196.694 20 0 0 1 nc
29.165 -438.037 -88.514 20 0 0 1 nc
29.166 -286.584 -48.3327 20 1 0 0 nc
29.167 -212.403 -23.6057 20 0 0 1 nc
29.168 -280.402 10.3938 20 0 0 1 nc
29.169 -694.579 115.483 20 0 0 1 nc
29.170 -574.035 177.301 20 0 0 1 nc
29.171 +-567.302 43.6423 20.8452 0 0 1 nc
29.172 +-689.204 -237.261 20.8452 0 0 1 nc
29.173 +924.667 409.347 20.8452 0 0 1 nc
29.174 +588.113 544.499 20.8452 0 0 1 nc
29.175 +670.264 274.195 20.8452 1 0 0 nc
29.176 +-371.2 568.349 20.8452 0 0 1 nc
29.177 +-132.697 451.748 20.8452 1 0 0 nc
29.178 +-416.25 345.746 20.8452 0 0 1 nc
29.179 +-180.397 245.045 20.8452 1 0 0 nc
29.180 +-13.4452 133.743 20.8452 0 0 1 nc
29.181 +-262.548 107.243 20.8452 0 0 1 nc
29.182 +201.208 38.3422 20.8452 0 0 1 nc
29.183 +116.407 -173.66 20.8452 0 0 1 nc
29.184 +-26.6953 -19.9585 20.8452 1 0 0 nc
29.185 +-539.894 -262.64 20.8452 0 0 1 nc
29.186 +-323.543 -433.964 20.8452 0 0 1 nc
29.187 +-309.657 -57.9033 20.8452 1 0 0 nc
29.188 +-67.9734 -347.42 20.8452 1 0 0 nc
29.189 +415.393 -289.516 20.8452 1 0 0 nc
29.190 +730.084 -307.139 20.8452 0 0 1 nc
29.191 +526.164 32.7279 20.8452 1 0 0 nc
29.192 +762.812 -17.6227 20.8452 1 0 0 nc
29.193 +-67.9734 319.727 20.8452 0 0 1 nc
29.194 +329.797 314.692 20.8452 0 0 1 nc
29.195 +-5.03507 561.41 20.8452 0 0 1 nc
29.196 +422.945 521.129 20.8452 0 0 1 nc
29.197 +-470.779 158.605 20.8452 1 0 0 nc
29.198 +986.873 -115.807 20.8452 0 0 1 nc
29.199 +906.312 201.403 20.8452 0 0 1 nc
29.200 +-767.847 113.289 20.8452 1 0 0 nc
29.201 +-579.033 445.603 20.8452 0 0 1 nc
29.202 +-840.856 -246.718 20.8452 0 0 1 nc
29.203 +206.221 -205.967 20.8452 0 0 1 nc
29.204 +277.311 -252.33 20.8452 0 0 1 nc
29.205 +271.13 -175.058 20.8452 1 0 0 nc
29.206 +366.947 -110.15 20.8452 1 0 0 nc
29.207 +397.855 -196.694 20.8452 0 0 1 nc
29.208 +438.037 -88.514 20.8452 0 0 1 nc
29.209 +286.584 -48.3327 20.8452 1 0 0 nc
29.210 +212.403 -23.6057 20.8452 0 0 1 nc
29.211 +280.402 10.3938 20.8452 0 0 1 nc
29.212 +694.579 115.483 20.8452 0 0 1 nc
29.213 +574.035 177.301 20.8452 0 0 1 nc
29.214 grestore
29.215 grestore
29.216 showpage
30.1 --- a/doc/images/strongly_connected_components.eps Mon Jul 16 16:21:40 2018 +0200
30.2 +++ b/doc/images/strongly_connected_components.eps Wed Oct 17 19:14:07 2018 +0200
30.3 @@ -1,6 +1,6 @@
30.4 %!PS-Adobe-2.0 EPSF-2.0
30.5 %%Creator: LEMON, graphToEps()
30.6 -%%CreationDate: Fri Nov 4 13:47:12 2005
30.7 +%%CreationDate: Fri Mar 8 00:22:15 2013
30.8 %%BoundingBox: 0 0 842 596
30.9 %%EndComments
30.10 /lb { setlinewidth setrgbcolor newpath moveto
30.11 @@ -53,128 +53,128 @@
30.12 695.963 -397.916 translate
30.13 %Edges:
30.14 gsave
30.15 -2 setlinewidth 0 0 1 setrgbcolor newpath
30.16 +4.56973 setlinewidth 0 0 1 setrgbcolor newpath
30.17 218.178 27.2723 moveto
30.18 -192.373 -40.1551 188.622 -49.9556 169.228 -100.631 curveto stroke
30.19 -newpath 164.939 -111.838 moveto 165.492 -99.2013 lineto 172.964 -102.061 lineto closepath fill
30.20 -2 setlinewidth 0 0 1 setrgbcolor newpath
30.21 +195.849 -31.0725 190.033 -46.2697 176.306 -82.1369 curveto stroke
30.22 +newpath 163.235 -116.291 moveto 165.206 -77.8889 lineto 187.405 -86.3849 lineto closepath fill
30.23 +4.56973 setlinewidth 0 0 1 setrgbcolor newpath
30.24 44.8044 15.5841 moveto
30.25 -119.293 20.6059 129.775 21.3125 186.25 25.1199 curveto stroke
30.26 -newpath 198.223 25.927 moveto 186.519 21.1289 lineto 185.981 29.1108 lineto closepath fill
30.27 -2 setlinewidth 1 0 0 setrgbcolor newpath
30.28 +109.705 19.9594 126.016 21.0591 166.493 23.7879 curveto stroke
30.29 +newpath 202.98 26.2477 moveto 167.292 11.9299 lineto 165.694 35.6458 lineto closepath fill
30.30 +4.56973 setlinewidth 1 0 0 setrgbcolor newpath
30.31 218.178 27.2723 moveto
30.32 -285.395 -87.4449 290.763 -96.6058 348.102 -194.464 curveto stroke
30.33 -newpath 354.169 -204.818 moveto 344.651 -196.487 lineto 351.554 -192.442 lineto closepath fill
30.34 -2 setlinewidth 0 0 1 setrgbcolor newpath
30.35 +281.264 -80.3935 289.87 -95.0808 338.092 -177.379 curveto stroke
30.36 +newpath 356.579 -208.932 moveto 327.837 -183.388 lineto 348.346 -171.371 lineto closepath fill
30.37 +4.56973 setlinewidth 0 0 1 setrgbcolor newpath
30.38 157.79 -130.517 moveto
30.39 -108.71 -67.0521 102.27 -58.7243 64.3804 -9.72954 curveto stroke
30.40 -newpath 57.0394 -0.236898 moveto 67.5446 -7.28254 lineto 61.2162 -12.1765 lineto closepath fill
30.41 -2 setlinewidth 1 0 0 setrgbcolor newpath
30.42 +114.446 -74.4692 104.358 -61.4239 76.4943 -25.394 curveto stroke
30.43 +newpath 54.1228 3.53455 moveto 85.8959 -18.1234 lineto 67.0928 -32.6646 lineto closepath fill
30.44 +4.56973 setlinewidth 1 0 0 setrgbcolor newpath
30.45 -105.193 -261.035 moveto
30.46 --35.6576 -132.801 -30.5923 -123.459 29.5506 -12.5464 curveto stroke
30.47 -newpath 35.2708 -1.99743 moveto 33.0669 -14.4531 lineto 26.0343 -10.6397 lineto closepath fill
30.48 -2 setlinewidth 0 0 1 setrgbcolor newpath
30.49 +-39.4801 -139.85 -31.344 -124.846 20.1113 -29.9539 curveto stroke
30.50 +newpath 37.5434 2.19358 moveto 30.559 -35.6192 lineto 9.66361 -24.2886 lineto closepath fill
30.51 +4.56973 setlinewidth 0 0 1 setrgbcolor newpath
30.52 -465.576 -42.8564 moveto
30.53 --559.078 -25.5413 -569.47 -23.6169 -644.498 -9.72286 curveto stroke
30.54 -newpath -656.297 -7.5378 moveto -643.77 -5.78973 lineto -645.226 -13.656 lineto closepath fill
30.55 -2 setlinewidth 0 0 1 setrgbcolor newpath
30.56 +-550.335 -27.1603 -566.8 -24.1113 -625.027 -13.3286 curveto stroke
30.57 +newpath -660.985 -6.66971 moveto -622.863 -1.64245 lineto -627.191 -25.0148 lineto closepath fill
30.58 +4.56973 setlinewidth 0 0 1 setrgbcolor newpath
30.59 -574.666 -153.893 moveto
30.60 --528.842 -107.252 -521.515 -99.794 -488.002 -65.683 curveto stroke
30.61 -newpath -479.592 -57.123 moveto -485.149 -68.4863 lineto -490.856 -62.8797 lineto closepath fill
30.62 -2 setlinewidth 1 0 0 setrgbcolor newpath
30.63 +-535.911 -114.447 -524.692 -103.027 -501.88 -79.8085 curveto stroke
30.64 +newpath -476.251 -53.7222 moveto -493.402 -88.1377 lineto -510.358 -71.4793 lineto closepath fill
30.65 +4.56973 setlinewidth 1 0 0 setrgbcolor newpath
30.66 -490.901 120.777 moveto
30.67 --480.122 51.1328 -478.519 40.7713 -470.47 -11.2329 curveto stroke
30.68 -newpath -468.635 -23.0917 moveto -474.423 -11.8447 lineto -466.517 -10.6212 lineto closepath fill
30.69 -2 setlinewidth 0 0 1 setrgbcolor newpath
30.70 +-481.623 60.8277 -479.143 44.8049 -473.499 8.33636 curveto stroke
30.71 +newpath -467.906 -27.8032 moveto -485.244 6.51862 lineto -461.754 10.1541 lineto closepath fill
30.72 +4.56973 setlinewidth 0 0 1 setrgbcolor newpath
30.73 -675.963 -3.89604 moveto
30.74 --632.116 -68.8235 -626.228 -77.5422 -592.575 -127.374 curveto stroke
30.75 -newpath -585.859 -137.319 moveto -595.89 -129.612 lineto -589.26 -125.135 lineto closepath fill
30.76 -2 setlinewidth 0 0 1 setrgbcolor newpath
30.77 +-637.405 -60.9909 -628.201 -74.6206 -603.658 -110.963 curveto stroke
30.78 +newpath -583.191 -141.27 moveto -613.507 -117.615 lineto -593.808 -104.312 lineto closepath fill
30.79 +4.56973 setlinewidth 0 0 1 setrgbcolor newpath
30.80 -490.901 120.777 moveto
30.81 --435.445 215.844 -430.107 224.995 -384.3 303.522 curveto stroke
30.82 -newpath -378.253 313.887 moveto -380.845 301.507 lineto -387.755 305.537 lineto closepath fill
30.83 -2 setlinewidth 0 0 1 setrgbcolor newpath
30.84 +-439.75 208.465 -431.238 223.057 -394.278 286.417 curveto stroke
30.85 +newpath -375.851 318.006 moveto -384.012 280.429 lineto -404.543 292.406 lineto closepath fill
30.86 +4.56973 setlinewidth 0 0 1 setrgbcolor newpath
30.87 -266.879 114.933 moveto
30.88 --367.067 117.547 -377.642 117.822 -458.912 119.943 curveto stroke
30.89 -newpath -470.908 120.255 moveto -458.807 123.941 lineto -459.016 115.944 lineto closepath fill
30.90 -2 setlinewidth 0 0 1 setrgbcolor newpath
30.91 +-358.311 117.318 -375.109 117.756 -439.117 119.426 curveto stroke
30.92 +newpath -475.674 120.38 moveto -438.807 131.307 lineto -439.426 107.545 lineto closepath fill
30.93 +4.56973 setlinewidth 0 0 1 setrgbcolor newpath
30.94 -368.176 331.163 moveto
30.95 --322.511 233.685 -318.018 224.095 -280.454 143.911 curveto stroke
30.96 -newpath -275.364 133.044 moveto -284.076 142.214 lineto -276.832 145.608 lineto closepath fill
30.97 -2 setlinewidth 1 0 0 setrgbcolor newpath
30.98 +-326.156 241.466 -318.997 226.186 -288.855 161.843 curveto stroke
30.99 +newpath -273.341 128.727 moveto -299.617 156.801 lineto -278.092 166.885 lineto closepath fill
30.100 +4.56973 setlinewidth 1 0 0 setrgbcolor newpath
30.101 -266.879 114.933 moveto
30.102 --224.004 235.52 -220.448 245.52 -184.094 347.765 curveto stroke
30.103 -newpath -180.074 359.072 moveto -180.325 346.425 lineto -187.863 349.105 lineto closepath fill
30.104 -2 setlinewidth 0 0 1 setrgbcolor newpath
30.105 +-226.764 227.755 -221.069 243.774 -190.728 329.107 curveto stroke
30.106 +newpath -178.477 363.564 moveto -179.53 325.126 lineto -201.926 333.089 lineto closepath fill
30.107 +4.56973 setlinewidth 0 0 1 setrgbcolor newpath
30.108 -251.294 -335.059 moveto
30.109 --189.25 -303.624 -179.902 -298.887 -133.738 -275.498 curveto stroke
30.110 -newpath -123.034 -270.074 moveto -131.93 -279.066 lineto -135.546 -271.93 lineto closepath fill
30.111 -2 setlinewidth 0 0 1 setrgbcolor newpath
30.112 +-198.044 -308.079 -183.61 -300.766 -151.402 -284.448 curveto stroke
30.113 +newpath -118.781 -267.92 moveto -146.031 -295.049 lineto -156.774 -273.846 lineto closepath fill
30.114 +4.56973 setlinewidth 0 0 1 setrgbcolor newpath
30.115 -389.604 -136.361 moveto
30.116 --327.15 -226.083 -321.098 -234.777 -269.576 -308.795 curveto stroke
30.117 -newpath -262.72 -318.644 moveto -272.859 -311.081 lineto -266.293 -306.51 lineto closepath fill
30.118 -2 setlinewidth 1 0 0 setrgbcolor newpath
30.119 +-332.039 -219.059 -322.392 -232.919 -280.889 -292.543 curveto stroke
30.120 +newpath -259.996 -322.557 moveto -290.643 -299.333 lineto -271.134 -285.753 lineto closepath fill
30.121 +4.56973 setlinewidth 1 0 0 setrgbcolor newpath
30.122 5.84406 175.322 moveto
30.123 --76.0754 267.926 -83.1051 275.873 -152.172 353.948 curveto stroke
30.124 -newpath -160.122 362.936 moveto -149.176 356.598 lineto -155.168 351.298 lineto closepath fill
30.125 -2 setlinewidth 0 0 1 setrgbcolor newpath
30.126 +-70.5724 261.706 -81.8227 274.423 -139.051 339.116 curveto stroke
30.127 +newpath -163.281 366.507 moveto -130.149 346.991 lineto -147.953 331.242 lineto closepath fill
30.128 +4.56973 setlinewidth 0 0 1 setrgbcolor newpath
30.129 169.478 311.683 moveto
30.130 -96.8003 251.119 88.6819 244.353 30.4273 195.808 curveto stroke
30.131 -newpath 21.2086 188.126 moveto 27.8666 198.881 lineto 32.988 192.735 lineto closepath fill
30.132 -2 setlinewidth 0 0 1 setrgbcolor newpath
30.133 +103.641 256.819 90.7821 246.103 45.6398 208.485 curveto stroke
30.134 +newpath 17.546 185.074 moveto 38.0313 217.615 lineto 53.2483 199.355 lineto closepath fill
30.135 +4.56973 setlinewidth 0 0 1 setrgbcolor newpath
30.136 342.851 111.037 moveto
30.137 -263.766 202.563 256.831 210.589 190.4 287.47 curveto stroke
30.138 -newpath 182.554 296.55 moveto 193.427 290.085 lineto 187.373 284.855 lineto closepath fill
30.139 -2 setlinewidth 0 0 1 setrgbcolor newpath
30.140 +269.224 196.246 258.132 209.083 203.347 272.486 curveto stroke
30.141 +newpath 179.437 300.157 moveto 212.34 280.257 lineto 194.354 264.716 lineto closepath fill
30.142 +4.56973 setlinewidth 0 0 1 setrgbcolor newpath
30.143 5.84406 175.322 moveto
30.144 -163.16 145.314 173.605 143.321 311.418 117.033 curveto stroke
30.145 -newpath 323.205 114.784 moveto 310.668 113.104 lineto 312.167 120.962 lineto closepath fill
30.146 -2 setlinewidth 0 0 1 setrgbcolor newpath
30.147 +155.419 146.79 172.221 143.585 291.966 120.743 curveto stroke
30.148 +newpath 327.888 113.891 moveto 289.739 109.069 lineto 294.193 132.418 lineto closepath fill
30.149 +4.56973 setlinewidth 0 0 1 setrgbcolor newpath
30.150 342.851 111.037 moveto
30.151 -497.255 2.58683 505.964 -3.53033 643.932 -100.436 curveto stroke
30.152 -newpath 653.752 -107.334 moveto 641.633 -103.71 lineto 646.231 -97.163 lineto closepath fill
30.153 -2 setlinewidth 0 0 1 setrgbcolor newpath
30.154 +490.978 6.99574 505.015 -2.86383 627.727 -89.0547 curveto stroke
30.155 +newpath 657.653 -110.074 moveto 620.896 -98.7802 lineto 634.558 -79.3291 lineto closepath fill
30.156 +4.56973 setlinewidth 0 0 1 setrgbcolor newpath
30.157 364.28 -222.074 moveto
30.158 -354.298 -66.9063 353.616 -56.2971 344.905 79.1029 curveto stroke
30.159 -newpath 344.135 91.0781 moveto 348.897 79.3597 lineto 340.914 78.8461 lineto closepath fill
30.160 -2 setlinewidth 0 0 1 setrgbcolor newpath
30.161 +354.807 -74.8128 353.709 -57.7536 346.177 59.3416 curveto stroke
30.162 +newpath 343.829 95.836 moveto 358.037 60.1045 lineto 334.316 58.5786 lineto closepath fill
30.163 +4.56973 setlinewidth 0 0 1 setrgbcolor newpath
30.164 670.118 -118.829 moveto
30.165 -528.037 -166.793 517.967 -170.192 394.599 -211.839 curveto stroke
30.166 -newpath 383.229 -215.677 moveto 393.32 -208.049 lineto 395.878 -215.629 lineto closepath fill
30.167 -2 setlinewidth 1 0 0 setrgbcolor newpath
30.168 +535.595 -164.241 519.412 -169.704 413.361 -205.505 curveto stroke
30.169 +newpath 378.712 -217.202 moveto 409.559 -194.245 lineto 417.162 -216.766 lineto closepath fill
30.170 +4.56973 setlinewidth 1 0 0 setrgbcolor newpath
30.171 -105.193 -261.035 moveto
30.172 -118.401 -242.479 129.015 -241.598 332.39 -224.721 curveto stroke
30.173 -newpath 344.348 -223.728 moveto 332.72 -228.707 lineto 332.059 -220.734 lineto closepath fill
30.174 -2 setlinewidth 0 0 1 setrgbcolor newpath
30.175 +110.939 -243.099 128.069 -241.677 312.655 -226.358 curveto stroke
30.176 +newpath 349.1 -223.334 moveto 313.638 -238.202 lineto 311.672 -214.514 lineto closepath fill
30.177 +4.56973 setlinewidth 0 0 1 setrgbcolor newpath
30.178 -105.193 -261.035 moveto
30.179 --160.867 -161.176 -166.028 -151.918 -212.336 -68.858 curveto stroke
30.180 -newpath -218.179 -58.3769 moveto -208.842 -66.9102 lineto -215.829 -70.8058 lineto closepath fill
30.181 -2 setlinewidth 0 0 1 setrgbcolor newpath
30.182 +-156.746 -168.566 -164.987 -153.784 -202.693 -86.1539 curveto stroke
30.183 +newpath -220.5 -54.2129 moveto -192.312 -80.3665 lineto -213.073 -91.9413 lineto closepath fill
30.184 +4.56973 setlinewidth 0 0 1 setrgbcolor newpath
30.185 -227.918 -40.9084 moveto
30.186 --298.35 -82.4884 -307.42 -87.8432 -362.048 -120.093 curveto stroke
30.187 -newpath -372.381 -126.193 moveto -364.081 -116.648 lineto -360.014 -123.537 lineto closepath fill
30.188 +-290.327 -77.7521 -304.558 -86.1532 -344.995 -110.026 curveto stroke
30.189 +newpath -376.487 -128.617 moveto -351.037 -99.7914 lineto -338.953 -120.26 lineto closepath fill
30.190 grestore
30.191 %Nodes:
30.192 gsave
30.193 --389.604 -136.361 20 0 1 0 nc
30.194 --227.918 -40.9084 20 0 1 0 nc
30.195 --105.193 -261.035 20 0 1 0 nc
30.196 -364.28 -222.074 20 1 1 0 nc
30.197 -670.118 -118.829 20 1 1 0 nc
30.198 -342.851 111.037 20 1 1 0 nc
30.199 -5.84406 175.322 20 1 1 0 nc
30.200 -169.478 311.683 20 1 1 0 nc
30.201 --173.374 377.916 20 1 0 1 nc
30.202 --251.294 -335.059 20 0 1 0 nc
30.203 --266.879 114.933 20 0 0 0 nc
30.204 --368.176 331.163 20 0 0 0 nc
30.205 --490.901 120.777 20 0 0 0 nc
30.206 --574.666 -153.893 20 1 0 0 nc
30.207 --675.963 -3.89604 20 1 0 0 nc
30.208 --465.576 -42.8564 20 1 0 0 nc
30.209 -44.8044 15.5841 20 0 0 1 nc
30.210 -157.79 -130.517 20 0 0 1 nc
30.211 -218.178 27.2723 20 0 0 1 nc
30.212 +-389.604 -136.361 15.2324 0 1 0 nc
30.213 +-227.918 -40.9084 15.2324 0 1 0 nc
30.214 +-105.193 -261.035 15.2324 0 1 0 nc
30.215 +364.28 -222.074 15.2324 1 1 0 nc
30.216 +670.118 -118.829 15.2324 1 1 0 nc
30.217 +342.851 111.037 15.2324 1 1 0 nc
30.218 +5.84406 175.322 15.2324 1 1 0 nc
30.219 +169.478 311.683 15.2324 1 1 0 nc
30.220 +-173.374 377.916 15.2324 1 0 1 nc
30.221 +-251.294 -335.059 15.2324 0 1 0 nc
30.222 +-266.879 114.933 15.2324 0 0 0 nc
30.223 +-368.176 331.163 15.2324 0 0 0 nc
30.224 +-490.901 120.777 15.2324 0 0 0 nc
30.225 +-574.666 -153.893 15.2324 1 0 0 nc
30.226 +-675.963 -3.89604 15.2324 1 0 0 nc
30.227 +-465.576 -42.8564 15.2324 1 0 0 nc
30.228 +44.8044 15.5841 15.2324 0 0 1 nc
30.229 +157.79 -130.517 15.2324 0 0 1 nc
30.230 +218.178 27.2723 15.2324 0 0 1 nc
30.231 grestore
30.232 grestore
30.233 showpage
31.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
31.2 +++ b/doc/images/tsp.eps Wed Oct 17 19:14:07 2018 +0200
31.3 @@ -0,0 +1,229 @@
31.4 +%!PS-Adobe-2.0 EPSF-2.0
31.5 +%%Creator: LEMON, graphToEps()
31.6 +%%CreationDate: Tue Jun 15 00:58:57 2010
31.7 +%%BoundingBox: 31 41 649 709
31.8 +%%EndComments
31.9 +/lb { setlinewidth setrgbcolor newpath moveto
31.10 + 4 2 roll 1 index 1 index curveto stroke } bind def
31.11 +/l { setlinewidth setrgbcolor newpath moveto lineto stroke } bind def
31.12 +/c { newpath dup 3 index add 2 index moveto 0 360 arc closepath } bind def
31.13 +/sq { newpath 2 index 1 index add 2 index 2 index add moveto
31.14 + 2 index 1 index sub 2 index 2 index add lineto
31.15 + 2 index 1 index sub 2 index 2 index sub lineto
31.16 + 2 index 1 index add 2 index 2 index sub lineto
31.17 + closepath pop pop pop} bind def
31.18 +/di { newpath 2 index 1 index add 2 index moveto
31.19 + 2 index 2 index 2 index add lineto
31.20 + 2 index 1 index sub 2 index lineto
31.21 + 2 index 2 index 2 index sub lineto
31.22 + closepath pop pop pop} bind def
31.23 +/nc { 0 0 0 setrgbcolor 5 index 5 index 5 index c fill
31.24 + setrgbcolor 1.1 div c fill
31.25 + } bind def
31.26 +/nsq { 0 0 0 setrgbcolor 5 index 5 index 5 index sq fill
31.27 + setrgbcolor 1.1 div sq fill
31.28 + } bind def
31.29 +/ndi { 0 0 0 setrgbcolor 5 index 5 index 5 index di fill
31.30 + setrgbcolor 1.1 div di fill
31.31 + } bind def
31.32 +/nfemale { 0 0 0 setrgbcolor 3 index 0.0909091 1.5 mul mul setlinewidth
31.33 + newpath 5 index 5 index moveto 5 index 5 index 5 index 3.01 mul sub
31.34 + lineto 5 index 4 index .7 mul sub 5 index 5 index 2.2 mul sub moveto
31.35 + 5 index 4 index .7 mul add 5 index 5 index 2.2 mul sub lineto stroke
31.36 + 5 index 5 index 5 index c fill
31.37 + setrgbcolor 1.1 div c fill
31.38 + } bind def
31.39 +/nmale {
31.40 + 0 0 0 setrgbcolor 3 index 0.0909091 1.5 mul mul setlinewidth
31.41 + newpath 5 index 5 index moveto
31.42 + 5 index 4 index 1 mul 1.5 mul add
31.43 + 5 index 5 index 3 sqrt 1.5 mul mul add
31.44 + 1 index 1 index lineto
31.45 + 1 index 1 index 7 index sub moveto
31.46 + 1 index 1 index lineto
31.47 + exch 5 index 3 sqrt .5 mul mul sub exch 5 index .5 mul sub lineto
31.48 + stroke
31.49 + 5 index 5 index 5 index c fill
31.50 + setrgbcolor 1.1 div c fill
31.51 + } bind def
31.52 +/arrl 1 def
31.53 +/arrw 0.3 def
31.54 +/lrl { 2 index mul exch 2 index mul exch rlineto pop} bind def
31.55 +/arr { setrgbcolor /y1 exch def /x1 exch def /dy exch def /dx exch def
31.56 + /w exch def /len exch def
31.57 + newpath x1 dy w 2 div mul add y1 dx w 2 div mul sub moveto
31.58 + len w sub arrl sub dx dy lrl
31.59 + arrw dy dx neg lrl
31.60 + dx arrl w add mul dy w 2 div arrw add mul sub
31.61 + dy arrl w add mul dx w 2 div arrw add mul add rlineto
31.62 + dx arrl w add mul neg dy w 2 div arrw add mul sub
31.63 + dy arrl w add mul neg dx w 2 div arrw add mul add rlineto
31.64 + arrw dy dx neg lrl
31.65 + len w sub arrl sub neg dx dy lrl
31.66 + closepath fill } bind def
31.67 +/cshow { 2 index 2 index moveto dup stringwidth pop
31.68 + neg 2 div fosi .35 mul neg rmoveto show pop pop} def
31.69 +
31.70 +gsave
31.71 +10 dup scale
31.72 +%Arcs:
31.73 +gsave
31.74 +27 68 37 69 0 0 1 0.513798 l
31.75 +37 69 27 68 0 0 1 0.513798 l
31.76 +8 52 5 64 0 0 1 0.513798 l
31.77 +5 64 8 52 0 0 1 0.513798 l
31.78 +16 57 25 55 0 0 1 0.513798 l
31.79 +25 55 16 57 0 0 1 0.513798 l
31.80 +43 67 37 69 0 0 1 0.513798 l
31.81 +37 69 43 67 0 0 1 0.513798 l
31.82 +42 57 43 67 0 0 1 0.513798 l
31.83 +43 67 42 57 0 0 1 0.513798 l
31.84 +62 42 61 33 0 0 1 0.513798 l
31.85 +61 33 62 42 0 0 1 0.513798 l
31.86 +62 42 58 48 0 0 1 0.513798 l
31.87 +58 48 62 42 0 0 1 0.513798 l
31.88 +58 27 61 33 0 0 1 0.513798 l
31.89 +61 33 58 27 0 0 1 0.513798 l
31.90 +57 58 62 63 0 0 1 0.513798 l
31.91 +62 63 57 58 0 0 1 0.513798 l
31.92 +13 13 21 10 0 0 1 0.513798 l
31.93 +21 10 13 13 0 0 1 0.513798 l
31.94 +13 13 5 6 0 0 1 0.513798 l
31.95 +5 6 13 13 0 0 1 0.513798 l
31.96 +17 33 7 38 0 0 1 0.513798 l
31.97 +7 38 17 33 0 0 1 0.513798 l
31.98 +46 10 59 15 0 0 1 0.513798 l
31.99 +59 15 46 10 0 0 1 0.513798 l
31.100 +46 10 39 10 0 0 1 0.513798 l
31.101 +39 10 46 10 0 0 1 0.513798 l
31.102 +27 23 21 10 0 0 1 0.513798 l
31.103 +21 10 27 23 0 0 1 0.513798 l
31.104 +52 41 56 37 0 0 1 0.513798 l
31.105 +56 37 52 41 0 0 1 0.513798 l
31.106 +62 63 63 69 0 0 1 0.513798 l
31.107 +63 69 62 63 0 0 1 0.513798 l
31.108 +36 16 39 10 0 0 1 0.513798 l
31.109 +39 10 36 16 0 0 1 0.513798 l
31.110 +36 16 30 15 0 0 1 0.513798 l
31.111 +30 15 36 16 0 0 1 0.513798 l
31.112 +12 42 7 38 0 0 1 0.513798 l
31.113 +7 38 12 42 0 0 1 0.513798 l
31.114 +12 42 8 52 0 0 1 0.513798 l
31.115 +8 52 12 42 0 0 1 0.513798 l
31.116 +32 22 30 15 0 0 1 0.513798 l
31.117 +30 15 32 22 0 0 1 0.513798 l
31.118 +5 25 10 17 0 0 1 0.513798 l
31.119 +10 17 5 25 0 0 1 0.513798 l
31.120 +5 25 17 33 0 0 1 0.513798 l
31.121 +17 33 5 25 0 0 1 0.513798 l
31.122 +45 35 48 28 0 0 1 0.513798 l
31.123 +48 28 45 35 0 0 1 0.513798 l
31.124 +31 32 25 32 0 0 1 0.513798 l
31.125 +25 32 31 32 0 0 1 0.513798 l
31.126 +31 32 32 39 0 0 1 0.513798 l
31.127 +32 39 31 32 0 0 1 0.513798 l
31.128 +42 41 38 46 0 0 1 0.513798 l
31.129 +38 46 42 41 0 0 1 0.513798 l
31.130 +42 41 52 41 0 0 1 0.513798 l
31.131 +52 41 42 41 0 0 1 0.513798 l
31.132 +5 6 10 17 0 0 1 0.513798 l
31.133 +10 17 5 6 0 0 1 0.513798 l
31.134 +51 21 59 15 0 0 1 0.513798 l
31.135 +59 15 51 21 0 0 1 0.513798 l
31.136 +51 21 58 27 0 0 1 0.513798 l
31.137 +58 27 51 21 0 0 1 0.513798 l
31.138 +52 33 56 37 0 0 1 0.513798 l
31.139 +56 37 52 33 0 0 1 0.513798 l
31.140 +52 33 48 28 0 0 1 0.513798 l
31.141 +48 28 52 33 0 0 1 0.513798 l
31.142 +31 62 25 55 0 0 1 0.513798 l
31.143 +25 55 31 62 0 0 1 0.513798 l
31.144 +31 62 27 68 0 0 1 0.513798 l
31.145 +27 68 31 62 0 0 1 0.513798 l
31.146 +17 63 5 64 0 0 1 0.513798 l
31.147 +5 64 17 63 0 0 1 0.513798 l
31.148 +17 63 16 57 0 0 1 0.513798 l
31.149 +16 57 17 63 0 0 1 0.513798 l
31.150 +21 47 30 40 0 0 1 0.513798 l
31.151 +30 40 21 47 0 0 1 0.513798 l
31.152 +21 47 30 48 0 0 1 0.513798 l
31.153 +30 48 21 47 0 0 1 0.513798 l
31.154 +40 30 45 35 0 0 1 0.513798 l
31.155 +45 35 40 30 0 0 1 0.513798 l
31.156 +40 30 32 22 0 0 1 0.513798 l
31.157 +32 22 40 30 0 0 1 0.513798 l
31.158 +32 39 30 40 0 0 1 0.513798 l
31.159 +30 40 32 39 0 0 1 0.513798 l
31.160 +20 26 25 32 0 0 1 0.513798 l
31.161 +25 32 20 26 0 0 1 0.513798 l
31.162 +20 26 27 23 0 0 1 0.513798 l
31.163 +27 23 20 26 0 0 1 0.513798 l
31.164 +52 64 63 69 0 0 1 0.513798 l
31.165 +63 69 52 64 0 0 1 0.513798 l
31.166 +52 64 42 57 0 0 1 0.513798 l
31.167 +42 57 52 64 0 0 1 0.513798 l
31.168 +49 49 58 48 0 0 1 0.513798 l
31.169 +58 48 49 49 0 0 1 0.513798 l
31.170 +49 49 57 58 0 0 1 0.513798 l
31.171 +57 58 49 49 0 0 1 0.513798 l
31.172 +37 52 38 46 0 0 1 0.513798 l
31.173 +38 46 37 52 0 0 1 0.513798 l
31.174 +37 52 30 48 0 0 1 0.513798 l
31.175 +30 48 37 52 0 0 1 0.513798 l
31.176 +grestore
31.177 +%Nodes:
31.178 +gsave
31.179 +30 40 0.856329 1 1 1 nc
31.180 +56 37 0.856329 1 1 1 nc
31.181 +48 28 0.856329 1 1 1 nc
31.182 +25 55 0.856329 1 1 1 nc
31.183 +25 32 0.856329 1 1 1 nc
31.184 +32 39 0.856329 1 1 1 nc
31.185 +39 10 0.856329 1 1 1 nc
31.186 +30 15 0.856329 1 1 1 nc
31.187 +5 64 0.856329 1 1 1 nc
31.188 +21 10 0.856329 1 1 1 nc
31.189 +10 17 0.856329 1 1 1 nc
31.190 +5 6 0.856329 1 1 1 nc
31.191 +59 15 0.856329 1 1 1 nc
31.192 +45 35 0.856329 1 1 1 nc
31.193 +32 22 0.856329 1 1 1 nc
31.194 +63 69 0.856329 1 1 1 nc
31.195 +62 63 0.856329 1 1 1 nc
31.196 +61 33 0.856329 1 1 1 nc
31.197 +46 10 0.856329 1 1 1 nc
31.198 +38 46 0.856329 1 1 1 nc
31.199 +37 69 0.856329 1 1 1 nc
31.200 +58 27 0.856329 1 1 1 nc
31.201 +58 48 0.856329 1 1 1 nc
31.202 +43 67 0.856329 1 1 1 nc
31.203 +30 48 0.856329 1 1 1 nc
31.204 +27 68 0.856329 1 1 1 nc
31.205 +7 38 0.856329 1 1 1 nc
31.206 +8 52 0.856329 1 1 1 nc
31.207 +16 57 0.856329 1 1 1 nc
31.208 +42 57 0.856329 1 1 1 nc
31.209 +62 42 0.856329 1 1 1 nc
31.210 +57 58 0.856329 1 1 1 nc
31.211 +13 13 0.856329 1 1 1 nc
31.212 +17 33 0.856329 1 1 1 nc
31.213 +27 23 0.856329 1 1 1 nc
31.214 +52 41 0.856329 1 1 1 nc
31.215 +36 16 0.856329 1 1 1 nc
31.216 +12 42 0.856329 1 1 1 nc
31.217 +5 25 0.856329 1 1 1 nc
31.218 +31 32 0.856329 1 1 1 nc
31.219 +42 41 0.856329 1 1 1 nc
31.220 +51 21 0.856329 1 1 1 nc
31.221 +52 33 0.856329 1 1 1 nc
31.222 +31 62 0.856329 1 1 1 nc
31.223 +17 63 0.856329 1 1 1 nc
31.224 +21 47 0.856329 1 1 1 nc
31.225 +40 30 0.856329 1 1 1 nc
31.226 +20 26 0.856329 1 1 1 nc
31.227 +52 64 0.856329 1 1 1 nc
31.228 +49 49 0.856329 1 1 1 nc
31.229 +37 52 0.856329 1 1 1 nc
31.230 +grestore
31.231 +grestore
31.232 +showpage
32.1 --- a/doc/lgf.dox Mon Jul 16 16:21:40 2018 +0200
32.2 +++ b/doc/lgf.dox Wed Oct 17 19:14:07 2018 +0200
32.3 @@ -2,7 +2,7 @@
32.4 *
32.5 * This file is a part of LEMON, a generic C++ optimization library.
32.6 *
32.7 - * Copyright (C) 2003-2009
32.8 + * Copyright (C) 2003-2013
32.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
32.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
32.11 *
32.12 @@ -63,11 +63,28 @@
32.13 3 (40,10) 10 "Third node"
32.14 \endcode
32.15
32.16 -The \c \@arcs section is very similar to the \c \@nodes section, it
32.17 -again starts with a header line describing the names of the maps, but
32.18 -the \c "label" map is not obligatory here. The following lines
32.19 -describe the arcs. The first two tokens of each line are the source
32.20 -and the target node of the arc, respectively, then come the map
32.21 +The \e LGF files can also contain bipartite graphs, in this case a
32.22 +\c \@red_nodes and a \c \@blue_nodes sections describe the node set of the
32.23 +graph. If a map is in both of these sections, then it can be used as a
32.24 +regular node map.
32.25 +
32.26 +\code
32.27 + @red_nodes
32.28 + label only_red_map name
32.29 + 1 "cherry" "John"
32.30 + 2 "Santa Claus" "Jack"
32.31 + 3 "blood" "Jason"
32.32 + @blue_nodes
32.33 + label name
32.34 + 4 "Elisabeth"
32.35 + 5 "Eve"
32.36 +\endcode
32.37 +
32.38 +The \c \@arcs section is very similar to the \c \@nodes section,
32.39 +it again starts with a header line describing the names of the maps,
32.40 +but the \c "label" map is not obligatory here. The following lines
32.41 +describe the arcs. The first two tokens of each line are
32.42 +the source and the target node of the arc, respectively, then come the map
32.43 values. The source and target tokens must be node labels.
32.44
32.45 \code
33.1 --- a/doc/mainpage.dox.in Mon Jul 16 16:21:40 2018 +0200
33.2 +++ b/doc/mainpage.dox.in Wed Oct 17 19:14:07 2018 +0200
33.3 @@ -25,7 +25,7 @@
33.4 and <b>O</b>ptimization in <b>N</b>etworks</i>.
33.5 It is a C++ template library providing efficient implementations of common
33.6 data structures and algorithms with focus on combinatorial optimization
33.7 -tasks connected mainly with graphs and networks.
33.8 +tasks connected mainly with graphs and networks \cite DezsoJuttnerKovacs11Lemon.
33.9
33.10 <b>
33.11 LEMON is an <a class="el" href="http://opensource.org/">open source</a>
33.12 @@ -37,12 +37,12 @@
33.13
33.14 The project is maintained by the
33.15 <a href="http://www.cs.elte.hu/egres/">Egerváry Research Group on
33.16 -Combinatorial Optimization</a> \ref egres
33.17 +Combinatorial Optimization</a> \cite egres
33.18 at the Operations Research Department of the
33.19 <a href="http://www.elte.hu/en/">Eötvös Loránd University</a>,
33.20 Budapest, Hungary.
33.21 LEMON is also a member of the <a href="http://www.coin-or.org/">COIN-OR</a>
33.22 -initiative \ref coinor.
33.23 +initiative \cite coinor.
33.24
33.25 \section howtoread How to Read the Documentation
33.26
34.1 --- a/doc/min_cost_flow.dox Mon Jul 16 16:21:40 2018 +0200
34.2 +++ b/doc/min_cost_flow.dox Wed Oct 17 19:14:07 2018 +0200
34.3 @@ -2,7 +2,7 @@
34.4 *
34.5 * This file is a part of LEMON, a generic C++ optimization library.
34.6 *
34.7 - * Copyright (C) 2003-2010
34.8 + * Copyright (C) 2003-2013
34.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
34.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
34.11 *
34.12 @@ -26,7 +26,7 @@
34.13 The \e minimum \e cost \e flow \e problem is to find a feasible flow of
34.14 minimum total cost from a set of supply nodes to a set of demand nodes
34.15 in a network with capacity constraints (lower and upper bounds)
34.16 -and arc costs \ref amo93networkflows.
34.17 +and arc costs \cite amo93networkflows.
34.18
34.19 Formally, let \f$G=(V,A)\f$ be a digraph, \f$lower: A\rightarrow\mathbf{R}\f$,
34.20 \f$upper: A\rightarrow\mathbf{R}\cup\{+\infty\}\f$ denote the lower and
34.21 @@ -101,7 +101,7 @@
34.22 sup(u) \quad \forall u\in V \f]
34.23 \f[ lower(uv) \leq f(uv) \leq upper(uv) \quad \forall uv\in A \f]
34.24
34.25 -However if the sum of the supply values is zero, then these two problems
34.26 +However, if the sum of the supply values is zero, then these two problems
34.27 are equivalent.
34.28 The \ref min_cost_flow_algs "algorithms" in LEMON support the general
34.29 form, so if you need the equality form, you have to ensure this additional
35.1 --- a/doc/references.bib Mon Jul 16 16:21:40 2018 +0200
35.2 +++ b/doc/references.bib Wed Oct 17 19:14:07 2018 +0200
35.3 @@ -4,8 +4,7 @@
35.4 key = {LEMON},
35.5 title = {{LEMON} -- {L}ibrary for {E}fficient {M}odeling and
35.6 {O}ptimization in {N}etworks},
35.7 - howpublished = {\url{http://lemon.cs.elte.hu/}},
35.8 - year = 2009
35.9 + howpublished = {\url{http://lemon.cs.elte.hu/}}
35.10 }
35.11
35.12 @misc{egres,
35.13 @@ -23,6 +22,28 @@
35.14 }
35.15
35.16
35.17 +%%%%% Papers related to LEMON %%%%%
35.18 +
35.19 +@article{DezsoJuttnerKovacs11Lemon,
35.20 + author = {B. Dezs{\H o} and A. J\"uttner and P. Kov\'acs},
35.21 + title = {{LEMON} -- an open source {C++} graph template library},
35.22 + journal = {Electronic Notes in Theoretical Computer Science},
35.23 + volume = {264},
35.24 + pages = {23--45},
35.25 + year = {2011},
35.26 + note = {Proc. 2nd Workshop on Generative Technologies}
35.27 +}
35.28 +
35.29 +@article{KiralyKovacs12MCF,
35.30 + author = {Z. Kir\'aly and P. Kov\'acs},
35.31 + title = {Efficient implementations of minimum-cost flow algorithms},
35.32 + journal = {Acta Universitatis Sapientiae, Informatica},
35.33 + year = {2012},
35.34 + volume = {4},
35.35 + pages = {67--118}
35.36 +}
35.37 +
35.38 +
35.39 %%%%% Other libraries %%%%%%
35.40
35.41 @misc{boost,
35.42 @@ -213,6 +234,16 @@
35.43 pages = {309-311}
35.44 }
35.45
35.46 +@article{hartmann93finding,
35.47 + author = {Mark Hartmann and James B. Orlin},
35.48 + title = {Finding minimum cost to time ratio cycles with small
35.49 + integral transit times},
35.50 + journal = {Networks},
35.51 + year = 1993,
35.52 + volume = 23,
35.53 + pages = {567-574}
35.54 +}
35.55 +
35.56 @article{dasdan98minmeancycle,
35.57 author = {Ali Dasdan and Rajesh K. Gupta},
35.58 title = {Faster Maximum and Minimum Mean Cycle Alogrithms for
35.59 @@ -225,6 +256,17 @@
35.60 pages = {889-899}
35.61 }
35.62
35.63 +@article{dasdan04experimental,
35.64 + author = {Ali Dasdan},
35.65 + title = {Experimental analysis of the fastest optimum cycle
35.66 + ratio and mean algorithms},
35.67 + journal = {ACM Trans. Des. Autom. Electron. Syst.},
35.68 + year = 2004,
35.69 + volume = 9,
35.70 + issue = 4,
35.71 + pages = {385-418}
35.72 +}
35.73 +
35.74
35.75 %%%%% Minimum cost flow algorithms %%%%%
35.76
35.77 @@ -297,5 +339,18 @@
35.78 school = {University College},
35.79 address = {Dublin, Ireland},
35.80 year = 1991,
35.81 - month = sep,
35.82 + month = sep
35.83 }
35.84 +
35.85 +%%%%% Other algorithms %%%%%
35.86 +
35.87 +@article{grosso08maxclique,
35.88 + author = {Andrea Grosso and Marco Locatelli and Wayne Pullan},
35.89 + title = {Simple ingredients leading to very efficient
35.90 + heuristics for the maximum clique problem},
35.91 + journal = {Journal of Heuristics},
35.92 + year = 2008,
35.93 + volume = 14,
35.94 + number = 6,
35.95 + pages = {587--612}
35.96 +}
36.1 --- a/lemon/CMakeLists.txt Mon Jul 16 16:21:40 2018 +0200
36.2 +++ b/lemon/CMakeLists.txt Wed Oct 17 19:14:07 2018 +0200
36.3 @@ -4,12 +4,12 @@
36.4 )
36.5
36.6 CONFIGURE_FILE(
36.7 - ${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake
36.8 + ${CMAKE_CURRENT_SOURCE_DIR}/config.h.in
36.9 ${CMAKE_CURRENT_BINARY_DIR}/config.h
36.10 )
36.11
36.12 CONFIGURE_FILE(
36.13 - ${CMAKE_CURRENT_SOURCE_DIR}/lemon.pc.cmake
36.14 + ${CMAKE_CURRENT_SOURCE_DIR}/lemon.pc.in
36.15 ${CMAKE_CURRENT_BINARY_DIR}/lemon.pc
36.16 @ONLY
36.17 )
36.18 @@ -36,7 +36,7 @@
36.19
36.20 IF(LEMON_HAVE_CPLEX)
36.21 SET(LEMON_SOURCES ${LEMON_SOURCES} cplex.cc)
36.22 - INCLUDE_DIRECTORIES(${CPLEX_INCLUDE_DIRS})
36.23 + INCLUDE_DIRECTORIES(${ILOG_INCLUDE_DIRS})
36.24 ENDIF()
36.25
36.26 IF(LEMON_HAVE_CLP)
36.27 @@ -49,9 +49,19 @@
36.28 INCLUDE_DIRECTORIES(${COIN_INCLUDE_DIRS})
36.29 ENDIF()
36.30
36.31 +IF(LEMON_HAVE_SOPLEX)
36.32 + SET(LEMON_SOURCES ${LEMON_SOURCES} soplex.cc)
36.33 + INCLUDE_DIRECTORIES(${SOPLEX_INCLUDE_DIRS})
36.34 +ENDIF()
36.35 +
36.36 ADD_LIBRARY(lemon ${LEMON_SOURCES})
36.37 +
36.38 +TARGET_LINK_LIBRARIES(lemon
36.39 + ${GLPK_LIBRARIES} ${COIN_LIBRARIES} ${ILOG_LIBRARIES} ${SOPLEX_LIBRARIES}
36.40 + )
36.41 +
36.42 IF(UNIX)
36.43 - SET_TARGET_PROPERTIES(lemon PROPERTIES OUTPUT_NAME emon)
36.44 + SET_TARGET_PROPERTIES(lemon PROPERTIES OUTPUT_NAME emon VERSION ${LEMON_VERSION} SOVERSION ${LEMON_VERSION})
36.45 ENDIF()
36.46
36.47 INSTALL(
37.1 --- a/lemon/Makefile.am Mon Jul 16 16:21:40 2018 +0200
37.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
37.3 @@ -1,151 +0,0 @@
37.4 -EXTRA_DIST += \
37.5 - lemon/lemon.pc.in \
37.6 - lemon/lemon.pc.cmake \
37.7 - lemon/CMakeLists.txt \
37.8 - lemon/config.h.cmake
37.9 -
37.10 -pkgconfig_DATA += lemon/lemon.pc
37.11 -
37.12 -lib_LTLIBRARIES += lemon/libemon.la
37.13 -
37.14 -lemon_libemon_la_SOURCES = \
37.15 - lemon/arg_parser.cc \
37.16 - lemon/base.cc \
37.17 - lemon/color.cc \
37.18 - lemon/lp_base.cc \
37.19 - lemon/lp_skeleton.cc \
37.20 - lemon/random.cc \
37.21 - lemon/bits/windows.cc
37.22 -
37.23 -nodist_lemon_HEADERS = lemon/config.h
37.24 -
37.25 -lemon_libemon_la_CXXFLAGS = \
37.26 - $(AM_CXXFLAGS) \
37.27 - $(GLPK_CFLAGS) \
37.28 - $(CPLEX_CFLAGS) \
37.29 - $(SOPLEX_CXXFLAGS) \
37.30 - $(CLP_CXXFLAGS) \
37.31 - $(CBC_CXXFLAGS)
37.32 -
37.33 -lemon_libemon_la_LDFLAGS = \
37.34 - $(GLPK_LIBS) \
37.35 - $(CPLEX_LIBS) \
37.36 - $(SOPLEX_LIBS) \
37.37 - $(CLP_LIBS) \
37.38 - $(CBC_LIBS)
37.39 -
37.40 -if HAVE_GLPK
37.41 -lemon_libemon_la_SOURCES += lemon/glpk.cc
37.42 -endif
37.43 -
37.44 -if HAVE_CPLEX
37.45 -lemon_libemon_la_SOURCES += lemon/cplex.cc
37.46 -endif
37.47 -
37.48 -if HAVE_SOPLEX
37.49 -lemon_libemon_la_SOURCES += lemon/soplex.cc
37.50 -endif
37.51 -
37.52 -if HAVE_CLP
37.53 -lemon_libemon_la_SOURCES += lemon/clp.cc
37.54 -endif
37.55 -
37.56 -if HAVE_CBC
37.57 -lemon_libemon_la_SOURCES += lemon/cbc.cc
37.58 -endif
37.59 -
37.60 -lemon_HEADERS += \
37.61 - lemon/adaptors.h \
37.62 - lemon/arg_parser.h \
37.63 - lemon/assert.h \
37.64 - lemon/bellman_ford.h \
37.65 - lemon/bfs.h \
37.66 - lemon/bin_heap.h \
37.67 - lemon/binomial_heap.h \
37.68 - lemon/bucket_heap.h \
37.69 - lemon/capacity_scaling.h \
37.70 - lemon/cbc.h \
37.71 - lemon/circulation.h \
37.72 - lemon/clp.h \
37.73 - lemon/color.h \
37.74 - lemon/concept_check.h \
37.75 - lemon/connectivity.h \
37.76 - lemon/core.h \
37.77 - lemon/cost_scaling.h \
37.78 - lemon/counter.h \
37.79 - lemon/cplex.h \
37.80 - lemon/cycle_canceling.h \
37.81 - lemon/dfs.h \
37.82 - lemon/dheap.h \
37.83 - lemon/dijkstra.h \
37.84 - lemon/dim2.h \
37.85 - lemon/dimacs.h \
37.86 - lemon/edge_set.h \
37.87 - lemon/elevator.h \
37.88 - lemon/error.h \
37.89 - lemon/euler.h \
37.90 - lemon/fib_heap.h \
37.91 - lemon/fractional_matching.h \
37.92 - lemon/full_graph.h \
37.93 - lemon/glpk.h \
37.94 - lemon/gomory_hu.h \
37.95 - lemon/graph_to_eps.h \
37.96 - lemon/grid_graph.h \
37.97 - lemon/hartmann_orlin_mmc.h \
37.98 - lemon/howard_mmc.h \
37.99 - lemon/hypercube_graph.h \
37.100 - lemon/karp_mmc.h \
37.101 - lemon/kruskal.h \
37.102 - lemon/hao_orlin.h \
37.103 - lemon/lgf_reader.h \
37.104 - lemon/lgf_writer.h \
37.105 - lemon/list_graph.h \
37.106 - lemon/lp.h \
37.107 - lemon/lp_base.h \
37.108 - lemon/lp_skeleton.h \
37.109 - lemon/maps.h \
37.110 - lemon/matching.h \
37.111 - lemon/math.h \
37.112 - lemon/min_cost_arborescence.h \
37.113 - lemon/nauty_reader.h \
37.114 - lemon/network_simplex.h \
37.115 - lemon/pairing_heap.h \
37.116 - lemon/path.h \
37.117 - lemon/planarity.h \
37.118 - lemon/preflow.h \
37.119 - lemon/quad_heap.h \
37.120 - lemon/radix_heap.h \
37.121 - lemon/radix_sort.h \
37.122 - lemon/random.h \
37.123 - lemon/smart_graph.h \
37.124 - lemon/soplex.h \
37.125 - lemon/static_graph.h \
37.126 - lemon/suurballe.h \
37.127 - lemon/time_measure.h \
37.128 - lemon/tolerance.h \
37.129 - lemon/unionfind.h \
37.130 - lemon/bits/windows.h
37.131 -
37.132 -bits_HEADERS += \
37.133 - lemon/bits/alteration_notifier.h \
37.134 - lemon/bits/array_map.h \
37.135 - lemon/bits/bezier.h \
37.136 - lemon/bits/default_map.h \
37.137 - lemon/bits/edge_set_extender.h \
37.138 - lemon/bits/enable_if.h \
37.139 - lemon/bits/graph_adaptor_extender.h \
37.140 - lemon/bits/graph_extender.h \
37.141 - lemon/bits/map_extender.h \
37.142 - lemon/bits/path_dump.h \
37.143 - lemon/bits/solver_bits.h \
37.144 - lemon/bits/traits.h \
37.145 - lemon/bits/variant.h \
37.146 - lemon/bits/vector_map.h
37.147 -
37.148 -concept_HEADERS += \
37.149 - lemon/concepts/digraph.h \
37.150 - lemon/concepts/graph.h \
37.151 - lemon/concepts/graph_components.h \
37.152 - lemon/concepts/heap.h \
37.153 - lemon/concepts/maps.h \
37.154 - lemon/concepts/path.h
38.1 --- a/lemon/adaptors.h Mon Jul 16 16:21:40 2018 +0200
38.2 +++ b/lemon/adaptors.h Wed Oct 17 19:14:07 2018 +0200
38.3 @@ -2,7 +2,7 @@
38.4 *
38.5 * This file is a part of LEMON, a generic C++ optimization library.
38.6 *
38.7 - * Copyright (C) 2003-2010
38.8 + * Copyright (C) 2003-2013
38.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
38.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
38.11 *
39.1 --- a/lemon/arg_parser.cc Mon Jul 16 16:21:40 2018 +0200
39.2 +++ b/lemon/arg_parser.cc Wed Oct 17 19:14:07 2018 +0200
39.3 @@ -221,9 +221,9 @@
39.4 const std::string &opt)
39.5 {
39.6 Opts::iterator o = _opts.find(opt);
39.7 - Opts::iterator s = _opts.find(syn);
39.8 LEMON_ASSERT(o!=_opts.end(), "Unknown option: '"+opt+"'");
39.9 - LEMON_ASSERT(s==_opts.end(), "Option already used: '"+syn+"'");
39.10 + LEMON_ASSERT(_opts.find(syn)==_opts.end(),
39.11 + "Option already used: '"+syn+"'");
39.12 ParData p;
39.13 p.help=opt;
39.14 p.mandatory=false;
40.1 --- a/lemon/arg_parser.h Mon Jul 16 16:21:40 2018 +0200
40.2 +++ b/lemon/arg_parser.h Wed Oct 17 19:14:07 2018 +0200
40.3 @@ -26,6 +26,7 @@
40.4 #include <iostream>
40.5 #include <sstream>
40.6 #include <algorithm>
40.7 +#include <lemon/core.h>
40.8 #include <lemon/assert.h>
40.9
40.10 ///\ingroup misc
41.1 --- a/lemon/assert.h Mon Jul 16 16:21:40 2018 +0200
41.2 +++ b/lemon/assert.h Wed Oct 17 19:14:07 2018 +0200
41.3 @@ -2,7 +2,7 @@
41.4 *
41.5 * This file is a part of LEMON, a generic C++ optimization library.
41.6 *
41.7 - * Copyright (C) 2003-2009
41.8 + * Copyright (C) 2003-2013
41.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
41.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
41.11 *
41.12 @@ -199,7 +199,7 @@
41.13 LEMON_FUNCTION_NAME, \
41.14 ::lemon::_assert_bits::cstringify(msg), \
41.15 #exp), 0)))
41.16 -# if LEMON_ENABLE_DEBUG
41.17 +# if defined LEMON_ENABLE_DEBUG
41.18 # define LEMON_DEBUG(exp, msg) \
41.19 (static_cast<void> (!!(exp) ? 0 : ( \
41.20 LEMON_ASSERT_HANDLER(__FILE__, __LINE__, \
42.1 --- a/lemon/base.cc Mon Jul 16 16:21:40 2018 +0200
42.2 +++ b/lemon/base.cc Wed Oct 17 19:14:07 2018 +0200
42.3 @@ -2,7 +2,7 @@
42.4 *
42.5 * This file is a part of LEMON, a generic C++ optimization library.
42.6 *
42.7 - * Copyright (C) 2003-2009
42.8 + * Copyright (C) 2003-2013
42.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
42.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
42.11 *
42.12 @@ -21,6 +21,7 @@
42.13
42.14 #include<lemon/tolerance.h>
42.15 #include<lemon/core.h>
42.16 +#include<lemon/time_measure.h>
42.17 namespace lemon {
42.18
42.19 float Tolerance<float>::def_epsilon = static_cast<float>(1e-4);
42.20 @@ -31,4 +32,6 @@
42.21 const Invalid INVALID = Invalid();
42.22 #endif
42.23
42.24 + TimeStamp::Format TimeStamp::_format = TimeStamp::NORMAL;
42.25 +
42.26 } //namespace lemon
43.1 --- a/lemon/bellman_ford.h Mon Jul 16 16:21:40 2018 +0200
43.2 +++ b/lemon/bellman_ford.h Wed Oct 17 19:14:07 2018 +0200
43.3 @@ -2,7 +2,7 @@
43.4 *
43.5 * This file is a part of LEMON, a generic C++ optimization library.
43.6 *
43.7 - * Copyright (C) 2003-2010
43.8 + * Copyright (C) 2003-2013
43.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
43.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
43.11 *
43.12 @@ -149,7 +149,7 @@
43.13 /// \ingroup shortest_path
43.14 /// This class provides an efficient implementation of the Bellman-Ford
43.15 /// algorithm. The maximum time complexity of the algorithm is
43.16 - /// <tt>O(ne)</tt>.
43.17 + /// <tt>O(nm)</tt>.
43.18 ///
43.19 /// The Bellman-Ford algorithm solves the single-source shortest path
43.20 /// problem when the arcs can have negative lengths, but the digraph
43.21 @@ -200,11 +200,12 @@
43.22 typedef typename TR::DistMap DistMap;
43.23 /// The type of the paths.
43.24 typedef PredMapPath<Digraph, PredMap> Path;
43.25 - ///\brief The \ref BellmanFordDefaultOperationTraits
43.26 + ///\brief The \ref lemon::BellmanFordDefaultOperationTraits
43.27 /// "operation traits class" of the algorithm.
43.28 typedef typename TR::OperationTraits OperationTraits;
43.29
43.30 - ///The \ref BellmanFordDefaultTraits "traits class" of the algorithm.
43.31 + ///\brief The \ref lemon::BellmanFordDefaultTraits "traits class"
43.32 + ///of the algorithm.
43.33 typedef TR Traits;
43.34
43.35 private:
44.1 --- a/lemon/bfs.h Mon Jul 16 16:21:40 2018 +0200
44.2 +++ b/lemon/bfs.h Wed Oct 17 19:14:07 2018 +0200
44.3 @@ -2,7 +2,7 @@
44.4 *
44.5 * This file is a part of LEMON, a generic C++ optimization library.
44.6 *
44.7 - * Copyright (C) 2003-2010
44.8 + * Copyright (C) 2003-2013
44.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
44.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
44.11 *
44.12 @@ -152,7 +152,7 @@
44.13 ///The type of the paths.
44.14 typedef PredMapPath<Digraph, PredMap> Path;
44.15
44.16 - ///The \ref BfsDefaultTraits "traits class" of the algorithm.
44.17 + ///The \ref lemon::BfsDefaultTraits "traits class" of the algorithm.
44.18 typedef TR Traits;
44.19
44.20 private:
45.1 --- a/lemon/bin_heap.h Mon Jul 16 16:21:40 2018 +0200
45.2 +++ b/lemon/bin_heap.h Wed Oct 17 19:14:07 2018 +0200
45.3 @@ -2,7 +2,7 @@
45.4 *
45.5 * This file is a part of LEMON, a generic C++ optimization library.
45.6 *
45.7 - * Copyright (C) 2003-2009
45.8 + * Copyright (C) 2003-2013
45.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
45.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
45.11 *
46.1 --- a/lemon/bits/alteration_notifier.h Mon Jul 16 16:21:40 2018 +0200
46.2 +++ b/lemon/bits/alteration_notifier.h Wed Oct 17 19:14:07 2018 +0200
46.3 @@ -2,7 +2,7 @@
46.4 *
46.5 * This file is a part of LEMON, a generic C++ optimization library.
46.6 *
46.7 - * Copyright (C) 2003-2009
46.8 + * Copyright (C) 2003-2013
46.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
46.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
46.11 *
46.12 @@ -23,6 +23,7 @@
46.13 #include <list>
46.14
46.15 #include <lemon/core.h>
46.16 +#include <lemon/bits/lock.h>
46.17
46.18 //\ingroup graphbits
46.19 //\file
46.20 @@ -251,7 +252,7 @@
46.21
46.22 typedef std::list<ObserverBase*> Observers;
46.23 Observers _observers;
46.24 -
46.25 + lemon::bits::Lock _lock;
46.26
46.27 public:
46.28
46.29 @@ -332,14 +333,18 @@
46.30 protected:
46.31
46.32 void attach(ObserverBase& observer) {
46.33 + _lock.lock();
46.34 observer._index = _observers.insert(_observers.begin(), &observer);
46.35 observer._notifier = this;
46.36 + _lock.unlock();
46.37 }
46.38
46.39 void detach(ObserverBase& observer) {
46.40 + _lock.lock();
46.41 _observers.erase(observer._index);
46.42 observer._index = _observers.end();
46.43 observer._notifier = 0;
46.44 + _lock.unlock();
46.45 }
46.46
46.47 public:
47.1 --- a/lemon/bits/array_map.h Mon Jul 16 16:21:40 2018 +0200
47.2 +++ b/lemon/bits/array_map.h Wed Oct 17 19:14:07 2018 +0200
47.3 @@ -2,7 +2,7 @@
47.4 *
47.5 * This file is a part of LEMON, a generic C++ optimization library.
47.6 *
47.7 - * Copyright (C) 2003-2010
47.8 + * Copyright (C) 2003-2013
47.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
47.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
47.11 *
48.1 --- a/lemon/bits/bezier.h Mon Jul 16 16:21:40 2018 +0200
48.2 +++ b/lemon/bits/bezier.h Wed Oct 17 19:14:07 2018 +0200
48.3 @@ -2,7 +2,7 @@
48.4 *
48.5 * This file is a part of LEMON, a generic C++ optimization library.
48.6 *
48.7 - * Copyright (C) 2003-2009
48.8 + * Copyright (C) 2003-2013
48.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
48.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
48.11 *
49.1 --- a/lemon/bits/default_map.h Mon Jul 16 16:21:40 2018 +0200
49.2 +++ b/lemon/bits/default_map.h Wed Oct 17 19:14:07 2018 +0200
49.3 @@ -2,7 +2,7 @@
49.4 *
49.5 * This file is a part of LEMON, a generic C++ optimization library.
49.6 *
49.7 - * Copyright (C) 2003-2010
49.8 + * Copyright (C) 2003-2013
49.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
49.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
49.11 *
50.1 --- a/lemon/bits/edge_set_extender.h Mon Jul 16 16:21:40 2018 +0200
50.2 +++ b/lemon/bits/edge_set_extender.h Wed Oct 17 19:14:07 2018 +0200
50.3 @@ -2,7 +2,7 @@
50.4 *
50.5 * This file is a part of LEMON, a generic C++ optimization library.
50.6 *
50.7 - * Copyright (C) 2003-2010
50.8 + * Copyright (C) 2003-2013
50.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
50.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
50.11 *
51.1 --- a/lemon/bits/graph_adaptor_extender.h Mon Jul 16 16:21:40 2018 +0200
51.2 +++ b/lemon/bits/graph_adaptor_extender.h Wed Oct 17 19:14:07 2018 +0200
51.3 @@ -2,7 +2,7 @@
51.4 *
51.5 * This file is a part of LEMON, a generic C++ optimization library.
51.6 *
51.7 - * Copyright (C) 2003-2009
51.8 + * Copyright (C) 2003-2013
51.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
51.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
51.11 *
52.1 --- a/lemon/bits/graph_extender.h Mon Jul 16 16:21:40 2018 +0200
52.2 +++ b/lemon/bits/graph_extender.h Wed Oct 17 19:14:07 2018 +0200
52.3 @@ -2,7 +2,7 @@
52.4 *
52.5 * This file is a part of LEMON, a generic C++ optimization library.
52.6 *
52.7 - * Copyright (C) 2003-2009
52.8 + * Copyright (C) 2003-2013
52.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
52.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
52.11 *
52.12 @@ -746,6 +746,587 @@
52.13
52.14 };
52.15
52.16 + // \ingroup _graphbits
52.17 + //
52.18 + // \brief Extender for the BpGraphs
52.19 + template <typename Base>
52.20 + class BpGraphExtender : public Base {
52.21 + typedef Base Parent;
52.22 +
52.23 + public:
52.24 +
52.25 + typedef BpGraphExtender BpGraph;
52.26 +
52.27 + typedef True UndirectedTag;
52.28 +
52.29 + typedef typename Parent::Node Node;
52.30 + typedef typename Parent::RedNode RedNode;
52.31 + typedef typename Parent::BlueNode BlueNode;
52.32 + typedef typename Parent::Arc Arc;
52.33 + typedef typename Parent::Edge Edge;
52.34 +
52.35 + // BpGraph extension
52.36 +
52.37 + using Parent::first;
52.38 + using Parent::next;
52.39 + using Parent::id;
52.40 +
52.41 + int maxId(Node) const {
52.42 + return Parent::maxNodeId();
52.43 + }
52.44 +
52.45 + int maxId(RedNode) const {
52.46 + return Parent::maxRedId();
52.47 + }
52.48 +
52.49 + int maxId(BlueNode) const {
52.50 + return Parent::maxBlueId();
52.51 + }
52.52 +
52.53 + int maxId(Arc) const {
52.54 + return Parent::maxArcId();
52.55 + }
52.56 +
52.57 + int maxId(Edge) const {
52.58 + return Parent::maxEdgeId();
52.59 + }
52.60 +
52.61 + static Node fromId(int id, Node) {
52.62 + return Parent::nodeFromId(id);
52.63 + }
52.64 +
52.65 + static Arc fromId(int id, Arc) {
52.66 + return Parent::arcFromId(id);
52.67 + }
52.68 +
52.69 + static Edge fromId(int id, Edge) {
52.70 + return Parent::edgeFromId(id);
52.71 + }
52.72 +
52.73 + Node u(Edge e) const { return this->redNode(e); }
52.74 + Node v(Edge e) const { return this->blueNode(e); }
52.75 +
52.76 + Node oppositeNode(const Node &n, const Edge &e) const {
52.77 + if( n == u(e))
52.78 + return v(e);
52.79 + else if( n == v(e))
52.80 + return u(e);
52.81 + else
52.82 + return INVALID;
52.83 + }
52.84 +
52.85 + Arc oppositeArc(const Arc &arc) const {
52.86 + return Parent::direct(arc, !Parent::direction(arc));
52.87 + }
52.88 +
52.89 + using Parent::direct;
52.90 + Arc direct(const Edge &edge, const Node &node) const {
52.91 + return Parent::direct(edge, Parent::redNode(edge) == node);
52.92 + }
52.93 +
52.94 + RedNode asRedNode(const Node& node) const {
52.95 + if (node == INVALID || Parent::blue(node)) {
52.96 + return INVALID;
52.97 + } else {
52.98 + return Parent::asRedNodeUnsafe(node);
52.99 + }
52.100 + }
52.101 +
52.102 + BlueNode asBlueNode(const Node& node) const {
52.103 + if (node == INVALID || Parent::red(node)) {
52.104 + return INVALID;
52.105 + } else {
52.106 + return Parent::asBlueNodeUnsafe(node);
52.107 + }
52.108 + }
52.109 +
52.110 + // Alterable extension
52.111 +
52.112 + typedef AlterationNotifier<BpGraphExtender, Node> NodeNotifier;
52.113 + typedef AlterationNotifier<BpGraphExtender, RedNode> RedNodeNotifier;
52.114 + typedef AlterationNotifier<BpGraphExtender, BlueNode> BlueNodeNotifier;
52.115 + typedef AlterationNotifier<BpGraphExtender, Arc> ArcNotifier;
52.116 + typedef AlterationNotifier<BpGraphExtender, Edge> EdgeNotifier;
52.117 +
52.118 +
52.119 + protected:
52.120 +
52.121 + mutable NodeNotifier node_notifier;
52.122 + mutable RedNodeNotifier red_node_notifier;
52.123 + mutable BlueNodeNotifier blue_node_notifier;
52.124 + mutable ArcNotifier arc_notifier;
52.125 + mutable EdgeNotifier edge_notifier;
52.126 +
52.127 + public:
52.128 +
52.129 + NodeNotifier& notifier(Node) const {
52.130 + return node_notifier;
52.131 + }
52.132 +
52.133 + RedNodeNotifier& notifier(RedNode) const {
52.134 + return red_node_notifier;
52.135 + }
52.136 +
52.137 + BlueNodeNotifier& notifier(BlueNode) const {
52.138 + return blue_node_notifier;
52.139 + }
52.140 +
52.141 + ArcNotifier& notifier(Arc) const {
52.142 + return arc_notifier;
52.143 + }
52.144 +
52.145 + EdgeNotifier& notifier(Edge) const {
52.146 + return edge_notifier;
52.147 + }
52.148 +
52.149 +
52.150 +
52.151 + class NodeIt : public Node {
52.152 + const BpGraph* _graph;
52.153 + public:
52.154 +
52.155 + NodeIt() {}
52.156 +
52.157 + NodeIt(Invalid i) : Node(i) { }
52.158 +
52.159 + explicit NodeIt(const BpGraph& graph) : _graph(&graph) {
52.160 + _graph->first(static_cast<Node&>(*this));
52.161 + }
52.162 +
52.163 + NodeIt(const BpGraph& graph, const Node& node)
52.164 + : Node(node), _graph(&graph) {}
52.165 +
52.166 + NodeIt& operator++() {
52.167 + _graph->next(*this);
52.168 + return *this;
52.169 + }
52.170 +
52.171 + };
52.172 +
52.173 + class RedNodeIt : public RedNode {
52.174 + const BpGraph* _graph;
52.175 + public:
52.176 +
52.177 + RedNodeIt() {}
52.178 +
52.179 + RedNodeIt(Invalid i) : RedNode(i) { }
52.180 +
52.181 + explicit RedNodeIt(const BpGraph& graph) : _graph(&graph) {
52.182 + _graph->first(static_cast<RedNode&>(*this));
52.183 + }
52.184 +
52.185 + RedNodeIt(const BpGraph& graph, const RedNode& node)
52.186 + : RedNode(node), _graph(&graph) {}
52.187 +
52.188 + RedNodeIt& operator++() {
52.189 + _graph->next(static_cast<RedNode&>(*this));
52.190 + return *this;
52.191 + }
52.192 +
52.193 + };
52.194 +
52.195 + class BlueNodeIt : public BlueNode {
52.196 + const BpGraph* _graph;
52.197 + public:
52.198 +
52.199 + BlueNodeIt() {}
52.200 +
52.201 + BlueNodeIt(Invalid i) : BlueNode(i) { }
52.202 +
52.203 + explicit BlueNodeIt(const BpGraph& graph) : _graph(&graph) {
52.204 + _graph->first(static_cast<BlueNode&>(*this));
52.205 + }
52.206 +
52.207 + BlueNodeIt(const BpGraph& graph, const BlueNode& node)
52.208 + : BlueNode(node), _graph(&graph) {}
52.209 +
52.210 + BlueNodeIt& operator++() {
52.211 + _graph->next(static_cast<BlueNode&>(*this));
52.212 + return *this;
52.213 + }
52.214 +
52.215 + };
52.216 +
52.217 +
52.218 + class ArcIt : public Arc {
52.219 + const BpGraph* _graph;
52.220 + public:
52.221 +
52.222 + ArcIt() { }
52.223 +
52.224 + ArcIt(Invalid i) : Arc(i) { }
52.225 +
52.226 + explicit ArcIt(const BpGraph& graph) : _graph(&graph) {
52.227 + _graph->first(static_cast<Arc&>(*this));
52.228 + }
52.229 +
52.230 + ArcIt(const BpGraph& graph, const Arc& arc) :
52.231 + Arc(arc), _graph(&graph) { }
52.232 +
52.233 + ArcIt& operator++() {
52.234 + _graph->next(*this);
52.235 + return *this;
52.236 + }
52.237 +
52.238 + };
52.239 +
52.240 +
52.241 + class OutArcIt : public Arc {
52.242 + const BpGraph* _graph;
52.243 + public:
52.244 +
52.245 + OutArcIt() { }
52.246 +
52.247 + OutArcIt(Invalid i) : Arc(i) { }
52.248 +
52.249 + OutArcIt(const BpGraph& graph, const Node& node)
52.250 + : _graph(&graph) {
52.251 + _graph->firstOut(*this, node);
52.252 + }
52.253 +
52.254 + OutArcIt(const BpGraph& graph, const Arc& arc)
52.255 + : Arc(arc), _graph(&graph) {}
52.256 +
52.257 + OutArcIt& operator++() {
52.258 + _graph->nextOut(*this);
52.259 + return *this;
52.260 + }
52.261 +
52.262 + };
52.263 +
52.264 +
52.265 + class InArcIt : public Arc {
52.266 + const BpGraph* _graph;
52.267 + public:
52.268 +
52.269 + InArcIt() { }
52.270 +
52.271 + InArcIt(Invalid i) : Arc(i) { }
52.272 +
52.273 + InArcIt(const BpGraph& graph, const Node& node)
52.274 + : _graph(&graph) {
52.275 + _graph->firstIn(*this, node);
52.276 + }
52.277 +
52.278 + InArcIt(const BpGraph& graph, const Arc& arc) :
52.279 + Arc(arc), _graph(&graph) {}
52.280 +
52.281 + InArcIt& operator++() {
52.282 + _graph->nextIn(*this);
52.283 + return *this;
52.284 + }
52.285 +
52.286 + };
52.287 +
52.288 +
52.289 + class EdgeIt : public Parent::Edge {
52.290 + const BpGraph* _graph;
52.291 + public:
52.292 +
52.293 + EdgeIt() { }
52.294 +
52.295 + EdgeIt(Invalid i) : Edge(i) { }
52.296 +
52.297 + explicit EdgeIt(const BpGraph& graph) : _graph(&graph) {
52.298 + _graph->first(static_cast<Edge&>(*this));
52.299 + }
52.300 +
52.301 + EdgeIt(const BpGraph& graph, const Edge& edge) :
52.302 + Edge(edge), _graph(&graph) { }
52.303 +
52.304 + EdgeIt& operator++() {
52.305 + _graph->next(*this);
52.306 + return *this;
52.307 + }
52.308 +
52.309 + };
52.310 +
52.311 + class IncEdgeIt : public Parent::Edge {
52.312 + friend class BpGraphExtender;
52.313 + const BpGraph* _graph;
52.314 + bool _direction;
52.315 + public:
52.316 +
52.317 + IncEdgeIt() { }
52.318 +
52.319 + IncEdgeIt(Invalid i) : Edge(i), _direction(false) { }
52.320 +
52.321 + IncEdgeIt(const BpGraph& graph, const Node &node) : _graph(&graph) {
52.322 + _graph->firstInc(*this, _direction, node);
52.323 + }
52.324 +
52.325 + IncEdgeIt(const BpGraph& graph, const Edge &edge, const Node &node)
52.326 + : _graph(&graph), Edge(edge) {
52.327 + _direction = (_graph->source(edge) == node);
52.328 + }
52.329 +
52.330 + IncEdgeIt& operator++() {
52.331 + _graph->nextInc(*this, _direction);
52.332 + return *this;
52.333 + }
52.334 + };
52.335 +
52.336 + // \brief Base node of the iterator
52.337 + //
52.338 + // Returns the base node (ie. the source in this case) of the iterator
52.339 + Node baseNode(const OutArcIt &arc) const {
52.340 + return Parent::source(static_cast<const Arc&>(arc));
52.341 + }
52.342 + // \brief Running node of the iterator
52.343 + //
52.344 + // Returns the running node (ie. the target in this case) of the
52.345 + // iterator
52.346 + Node runningNode(const OutArcIt &arc) const {
52.347 + return Parent::target(static_cast<const Arc&>(arc));
52.348 + }
52.349 +
52.350 + // \brief Base node of the iterator
52.351 + //
52.352 + // Returns the base node (ie. the target in this case) of the iterator
52.353 + Node baseNode(const InArcIt &arc) const {
52.354 + return Parent::target(static_cast<const Arc&>(arc));
52.355 + }
52.356 + // \brief Running node of the iterator
52.357 + //
52.358 + // Returns the running node (ie. the source in this case) of the
52.359 + // iterator
52.360 + Node runningNode(const InArcIt &arc) const {
52.361 + return Parent::source(static_cast<const Arc&>(arc));
52.362 + }
52.363 +
52.364 + // Base node of the iterator
52.365 + //
52.366 + // Returns the base node of the iterator
52.367 + Node baseNode(const IncEdgeIt &edge) const {
52.368 + return edge._direction ? this->u(edge) : this->v(edge);
52.369 + }
52.370 + // Running node of the iterator
52.371 + //
52.372 + // Returns the running node of the iterator
52.373 + Node runningNode(const IncEdgeIt &edge) const {
52.374 + return edge._direction ? this->v(edge) : this->u(edge);
52.375 + }
52.376 +
52.377 + // Mappable extension
52.378 +
52.379 + template <typename _Value>
52.380 + class NodeMap
52.381 + : public MapExtender<DefaultMap<BpGraph, Node, _Value> > {
52.382 + typedef MapExtender<DefaultMap<BpGraph, Node, _Value> > Parent;
52.383 +
52.384 + public:
52.385 + explicit NodeMap(const BpGraph& bpgraph)
52.386 + : Parent(bpgraph) {}
52.387 + NodeMap(const BpGraph& bpgraph, const _Value& value)
52.388 + : Parent(bpgraph, value) {}
52.389 +
52.390 + private:
52.391 + NodeMap& operator=(const NodeMap& cmap) {
52.392 + return operator=<NodeMap>(cmap);
52.393 + }
52.394 +
52.395 + template <typename CMap>
52.396 + NodeMap& operator=(const CMap& cmap) {
52.397 + Parent::operator=(cmap);
52.398 + return *this;
52.399 + }
52.400 +
52.401 + };
52.402 +
52.403 + template <typename _Value>
52.404 + class RedNodeMap
52.405 + : public MapExtender<DefaultMap<BpGraph, RedNode, _Value> > {
52.406 + typedef MapExtender<DefaultMap<BpGraph, RedNode, _Value> > Parent;
52.407 +
52.408 + public:
52.409 + explicit RedNodeMap(const BpGraph& bpgraph)
52.410 + : Parent(bpgraph) {}
52.411 + RedNodeMap(const BpGraph& bpgraph, const _Value& value)
52.412 + : Parent(bpgraph, value) {}
52.413 +
52.414 + private:
52.415 + RedNodeMap& operator=(const RedNodeMap& cmap) {
52.416 + return operator=<RedNodeMap>(cmap);
52.417 + }
52.418 +
52.419 + template <typename CMap>
52.420 + RedNodeMap& operator=(const CMap& cmap) {
52.421 + Parent::operator=(cmap);
52.422 + return *this;
52.423 + }
52.424 +
52.425 + };
52.426 +
52.427 + template <typename _Value>
52.428 + class BlueNodeMap
52.429 + : public MapExtender<DefaultMap<BpGraph, BlueNode, _Value> > {
52.430 + typedef MapExtender<DefaultMap<BpGraph, BlueNode, _Value> > Parent;
52.431 +
52.432 + public:
52.433 + explicit BlueNodeMap(const BpGraph& bpgraph)
52.434 + : Parent(bpgraph) {}
52.435 + BlueNodeMap(const BpGraph& bpgraph, const _Value& value)
52.436 + : Parent(bpgraph, value) {}
52.437 +
52.438 + private:
52.439 + BlueNodeMap& operator=(const BlueNodeMap& cmap) {
52.440 + return operator=<BlueNodeMap>(cmap);
52.441 + }
52.442 +
52.443 + template <typename CMap>
52.444 + BlueNodeMap& operator=(const CMap& cmap) {
52.445 + Parent::operator=(cmap);
52.446 + return *this;
52.447 + }
52.448 +
52.449 + };
52.450 +
52.451 + template <typename _Value>
52.452 + class ArcMap
52.453 + : public MapExtender<DefaultMap<BpGraph, Arc, _Value> > {
52.454 + typedef MapExtender<DefaultMap<BpGraph, Arc, _Value> > Parent;
52.455 +
52.456 + public:
52.457 + explicit ArcMap(const BpGraph& graph)
52.458 + : Parent(graph) {}
52.459 + ArcMap(const BpGraph& graph, const _Value& value)
52.460 + : Parent(graph, value) {}
52.461 +
52.462 + private:
52.463 + ArcMap& operator=(const ArcMap& cmap) {
52.464 + return operator=<ArcMap>(cmap);
52.465 + }
52.466 +
52.467 + template <typename CMap>
52.468 + ArcMap& operator=(const CMap& cmap) {
52.469 + Parent::operator=(cmap);
52.470 + return *this;
52.471 + }
52.472 + };
52.473 +
52.474 +
52.475 + template <typename _Value>
52.476 + class EdgeMap
52.477 + : public MapExtender<DefaultMap<BpGraph, Edge, _Value> > {
52.478 + typedef MapExtender<DefaultMap<BpGraph, Edge, _Value> > Parent;
52.479 +
52.480 + public:
52.481 + explicit EdgeMap(const BpGraph& graph)
52.482 + : Parent(graph) {}
52.483 +
52.484 + EdgeMap(const BpGraph& graph, const _Value& value)
52.485 + : Parent(graph, value) {}
52.486 +
52.487 + private:
52.488 + EdgeMap& operator=(const EdgeMap& cmap) {
52.489 + return operator=<EdgeMap>(cmap);
52.490 + }
52.491 +
52.492 + template <typename CMap>
52.493 + EdgeMap& operator=(const CMap& cmap) {
52.494 + Parent::operator=(cmap);
52.495 + return *this;
52.496 + }
52.497 +
52.498 + };
52.499 +
52.500 + // Alteration extension
52.501 +
52.502 + RedNode addRedNode() {
52.503 + RedNode node = Parent::addRedNode();
52.504 + notifier(RedNode()).add(node);
52.505 + notifier(Node()).add(node);
52.506 + return node;
52.507 + }
52.508 +
52.509 + BlueNode addBlueNode() {
52.510 + BlueNode node = Parent::addBlueNode();
52.511 + notifier(BlueNode()).add(node);
52.512 + notifier(Node()).add(node);
52.513 + return node;
52.514 + }
52.515 +
52.516 + Edge addEdge(const RedNode& from, const BlueNode& to) {
52.517 + Edge edge = Parent::addEdge(from, to);
52.518 + notifier(Edge()).add(edge);
52.519 + std::vector<Arc> av;
52.520 + av.push_back(Parent::direct(edge, true));
52.521 + av.push_back(Parent::direct(edge, false));
52.522 + notifier(Arc()).add(av);
52.523 + return edge;
52.524 + }
52.525 +
52.526 + void clear() {
52.527 + notifier(Arc()).clear();
52.528 + notifier(Edge()).clear();
52.529 + notifier(Node()).clear();
52.530 + notifier(BlueNode()).clear();
52.531 + notifier(RedNode()).clear();
52.532 + Parent::clear();
52.533 + }
52.534 +
52.535 + template <typename BpGraph, typename NodeRefMap, typename EdgeRefMap>
52.536 + void build(const BpGraph& graph, NodeRefMap& nodeRef,
52.537 + EdgeRefMap& edgeRef) {
52.538 + Parent::build(graph, nodeRef, edgeRef);
52.539 + notifier(RedNode()).build();
52.540 + notifier(BlueNode()).build();
52.541 + notifier(Node()).build();
52.542 + notifier(Edge()).build();
52.543 + notifier(Arc()).build();
52.544 + }
52.545 +
52.546 + void erase(const Node& node) {
52.547 + Arc arc;
52.548 + Parent::firstOut(arc, node);
52.549 + while (arc != INVALID ) {
52.550 + erase(arc);
52.551 + Parent::firstOut(arc, node);
52.552 + }
52.553 +
52.554 + Parent::firstIn(arc, node);
52.555 + while (arc != INVALID ) {
52.556 + erase(arc);
52.557 + Parent::firstIn(arc, node);
52.558 + }
52.559 +
52.560 + if (Parent::red(node)) {
52.561 + notifier(RedNode()).erase(this->asRedNodeUnsafe(node));
52.562 + } else {
52.563 + notifier(BlueNode()).erase(this->asBlueNodeUnsafe(node));
52.564 + }
52.565 +
52.566 + notifier(Node()).erase(node);
52.567 + Parent::erase(node);
52.568 + }
52.569 +
52.570 + void erase(const Edge& edge) {
52.571 + std::vector<Arc> av;
52.572 + av.push_back(Parent::direct(edge, true));
52.573 + av.push_back(Parent::direct(edge, false));
52.574 + notifier(Arc()).erase(av);
52.575 + notifier(Edge()).erase(edge);
52.576 + Parent::erase(edge);
52.577 + }
52.578 +
52.579 + BpGraphExtender() {
52.580 + red_node_notifier.setContainer(*this);
52.581 + blue_node_notifier.setContainer(*this);
52.582 + node_notifier.setContainer(*this);
52.583 + arc_notifier.setContainer(*this);
52.584 + edge_notifier.setContainer(*this);
52.585 + }
52.586 +
52.587 + ~BpGraphExtender() {
52.588 + edge_notifier.clear();
52.589 + arc_notifier.clear();
52.590 + node_notifier.clear();
52.591 + blue_node_notifier.clear();
52.592 + red_node_notifier.clear();
52.593 + }
52.594 +
52.595 + };
52.596 +
52.597 }
52.598
52.599 #endif
53.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
53.2 +++ b/lemon/bits/lock.h Wed Oct 17 19:14:07 2018 +0200
53.3 @@ -0,0 +1,65 @@
53.4 +/* -*- mode: C++; indent-tabs-mode: nil; -*-
53.5 + *
53.6 + * This file is a part of LEMON, a generic C++ optimization library.
53.7 + *
53.8 + * Copyright (C) 2003-2013
53.9 + * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
53.10 + * (Egervary Research Group on Combinatorial Optimization, EGRES).
53.11 + *
53.12 + * Permission to use, modify and distribute this software is granted
53.13 + * provided that this copyright notice appears in all copies. For
53.14 + * precise terms see the accompanying LICENSE file.
53.15 + *
53.16 + * This software is provided "AS IS" with no warranty of any kind,
53.17 + * express or implied, and with no claim as to its suitability for any
53.18 + * purpose.
53.19 + *
53.20 + */
53.21 +
53.22 +#ifndef LEMON_BITS_LOCK_H
53.23 +#define LEMON_BITS_LOCK_H
53.24 +
53.25 +#include <lemon/config.h>
53.26 +#if defined(LEMON_USE_PTHREAD)
53.27 +#include <pthread.h>
53.28 +#elif defined(LEMON_USE_WIN32_THREADS)
53.29 +#include <lemon/bits/windows.h>
53.30 +#endif
53.31 +
53.32 +namespace lemon {
53.33 + namespace bits {
53.34 +
53.35 +#if defined(LEMON_USE_PTHREAD)
53.36 + class Lock {
53.37 + public:
53.38 + Lock() {
53.39 + pthread_mutex_init(&_lock, 0);
53.40 + }
53.41 + ~Lock() {
53.42 + pthread_mutex_destroy(&_lock);
53.43 + }
53.44 + void lock() {
53.45 + pthread_mutex_lock(&_lock);
53.46 + }
53.47 + void unlock() {
53.48 + pthread_mutex_unlock(&_lock);
53.49 + }
53.50 +
53.51 + private:
53.52 + pthread_mutex_t _lock;
53.53 + };
53.54 +#elif defined(LEMON_USE_WIN32_THREADS)
53.55 + class Lock : public WinLock {};
53.56 +#else
53.57 + class Lock {
53.58 + public:
53.59 + Lock() {}
53.60 + ~Lock() {}
53.61 + void lock() {}
53.62 + void unlock() {}
53.63 + };
53.64 +#endif
53.65 + }
53.66 +}
53.67 +
53.68 +#endif
54.1 --- a/lemon/bits/map_extender.h Mon Jul 16 16:21:40 2018 +0200
54.2 +++ b/lemon/bits/map_extender.h Wed Oct 17 19:14:07 2018 +0200
54.3 @@ -2,7 +2,7 @@
54.4 *
54.5 * This file is a part of LEMON, a generic C++ optimization library.
54.6 *
54.7 - * Copyright (C) 2003-2009
54.8 + * Copyright (C) 2003-2013
54.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
54.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
54.11 *
55.1 --- a/lemon/bits/path_dump.h Mon Jul 16 16:21:40 2018 +0200
55.2 +++ b/lemon/bits/path_dump.h Wed Oct 17 19:14:07 2018 +0200
55.3 @@ -2,7 +2,7 @@
55.4 *
55.5 * This file is a part of LEMON, a generic C++ optimization library.
55.6 *
55.7 - * Copyright (C) 2003-2009
55.8 + * Copyright (C) 2003-2013
55.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
55.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
55.11 *
56.1 --- a/lemon/bits/solver_bits.h Mon Jul 16 16:21:40 2018 +0200
56.2 +++ b/lemon/bits/solver_bits.h Wed Oct 17 19:14:07 2018 +0200
56.3 @@ -2,7 +2,7 @@
56.4 *
56.5 * This file is a part of LEMON, a generic C++ optimization library.
56.6 *
56.7 - * Copyright (C) 2003-2010
56.8 + * Copyright (C) 2003-2013
56.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
56.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
56.11 *
57.1 --- a/lemon/bits/traits.h Mon Jul 16 16:21:40 2018 +0200
57.2 +++ b/lemon/bits/traits.h Wed Oct 17 19:14:07 2018 +0200
57.3 @@ -2,7 +2,7 @@
57.4 *
57.5 * This file is a part of LEMON, a generic C++ optimization library.
57.6 *
57.7 - * Copyright (C) 2003-2009
57.8 + * Copyright (C) 2003-2013
57.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
57.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
57.11 *
57.12 @@ -151,6 +151,88 @@
57.13
57.14 };
57.15
57.16 + template <typename GR, typename Enable = void>
57.17 + struct RedNodeNotifierIndicator {
57.18 + typedef InvalidType Type;
57.19 + };
57.20 + template <typename GR>
57.21 + struct RedNodeNotifierIndicator<
57.22 + GR,
57.23 + typename enable_if<typename GR::RedNodeNotifier::Notifier, void>::type
57.24 + > {
57.25 + typedef typename GR::RedNodeNotifier Type;
57.26 + };
57.27 +
57.28 + template <typename GR>
57.29 + class ItemSetTraits<GR, typename GR::RedNode> {
57.30 + public:
57.31 +
57.32 + typedef GR BpGraph;
57.33 + typedef GR Graph;
57.34 + typedef GR Digraph;
57.35 +
57.36 + typedef typename GR::RedNode Item;
57.37 + typedef typename GR::RedNodeIt ItemIt;
57.38 +
57.39 + typedef typename RedNodeNotifierIndicator<GR>::Type ItemNotifier;
57.40 +
57.41 + template <typename V>
57.42 + class Map : public GR::template RedNodeMap<V> {
57.43 + typedef typename GR::template RedNodeMap<V> Parent;
57.44 +
57.45 + public:
57.46 + typedef typename GR::template RedNodeMap<V> Type;
57.47 + typedef typename Parent::Value Value;
57.48 +
57.49 + Map(const GR& _bpgraph) : Parent(_bpgraph) {}
57.50 + Map(const GR& _bpgraph, const Value& _value)
57.51 + : Parent(_bpgraph, _value) {}
57.52 +
57.53 + };
57.54 +
57.55 + };
57.56 +
57.57 + template <typename GR, typename Enable = void>
57.58 + struct BlueNodeNotifierIndicator {
57.59 + typedef InvalidType Type;
57.60 + };
57.61 + template <typename GR>
57.62 + struct BlueNodeNotifierIndicator<
57.63 + GR,
57.64 + typename enable_if<typename GR::BlueNodeNotifier::Notifier, void>::type
57.65 + > {
57.66 + typedef typename GR::BlueNodeNotifier Type;
57.67 + };
57.68 +
57.69 + template <typename GR>
57.70 + class ItemSetTraits<GR, typename GR::BlueNode> {
57.71 + public:
57.72 +
57.73 + typedef GR BpGraph;
57.74 + typedef GR Graph;
57.75 + typedef GR Digraph;
57.76 +
57.77 + typedef typename GR::BlueNode Item;
57.78 + typedef typename GR::BlueNodeIt ItemIt;
57.79 +
57.80 + typedef typename BlueNodeNotifierIndicator<GR>::Type ItemNotifier;
57.81 +
57.82 + template <typename V>
57.83 + class Map : public GR::template BlueNodeMap<V> {
57.84 + typedef typename GR::template BlueNodeMap<V> Parent;
57.85 +
57.86 + public:
57.87 + typedef typename GR::template BlueNodeMap<V> Type;
57.88 + typedef typename Parent::Value Value;
57.89 +
57.90 + Map(const GR& _bpgraph) : Parent(_bpgraph) {}
57.91 + Map(const GR& _bpgraph, const Value& _value)
57.92 + : Parent(_bpgraph, _value) {}
57.93 +
57.94 + };
57.95 +
57.96 + };
57.97 +
57.98 template <typename Map, typename Enable = void>
57.99 struct MapTraits {
57.100 typedef False ReferenceMapTag;
58.1 --- a/lemon/bits/windows.cc Mon Jul 16 16:21:40 2018 +0200
58.2 +++ b/lemon/bits/windows.cc Wed Oct 17 19:14:07 2018 +0200
58.3 @@ -2,7 +2,7 @@
58.4 *
58.5 * This file is a part of LEMON, a generic C++ optimization library.
58.6 *
58.7 - * Copyright (C) 2003-2010
58.8 + * Copyright (C) 2003-2013
58.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
58.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
58.11 *
58.12 @@ -21,7 +21,11 @@
58.13
58.14 #include<lemon/bits/windows.h>
58.15
58.16 -#ifdef WIN32
58.17 +#if defined(LEMON_WIN32) && defined(__GNUC__)
58.18 +#pragma GCC diagnostic ignored "-Wold-style-cast"
58.19 +#endif
58.20 +
58.21 +#ifdef LEMON_WIN32
58.22 #ifndef WIN32_LEAN_AND_MEAN
58.23 #define WIN32_LEAN_AND_MEAN
58.24 #endif
58.25 @@ -40,7 +44,7 @@
58.26 #else
58.27 #include <unistd.h>
58.28 #include <ctime>
58.29 -#ifndef WIN32
58.30 +#ifndef LEMON_WIN32
58.31 #include <sys/times.h>
58.32 #endif
58.33 #include <sys/time.h>
58.34 @@ -55,7 +59,7 @@
58.35 double &utime, double &stime,
58.36 double &cutime, double &cstime)
58.37 {
58.38 -#ifdef WIN32
58.39 +#ifdef LEMON_WIN32
58.40 static const double ch = 4294967296.0e-7;
58.41 static const double cl = 1.0e-7;
58.42
58.43 @@ -94,11 +98,11 @@
58.44 std::string getWinFormattedDate()
58.45 {
58.46 std::ostringstream os;
58.47 -#ifdef WIN32
58.48 +#ifdef LEMON_WIN32
58.49 SYSTEMTIME time;
58.50 GetSystemTime(&time);
58.51 char buf1[11], buf2[9], buf3[5];
58.52 - if (GetDateFormat(MY_LOCALE, 0, &time,
58.53 + if (GetDateFormat(MY_LOCALE, 0, &time,
58.54 ("ddd MMM dd"), buf1, 11) &&
58.55 GetTimeFormat(MY_LOCALE, 0, &time,
58.56 ("HH':'mm':'ss"), buf2, 9) &&
58.57 @@ -120,7 +124,7 @@
58.58
58.59 int getWinRndSeed()
58.60 {
58.61 -#ifdef WIN32
58.62 +#ifdef LEMON_WIN32
58.63 FILETIME time;
58.64 GetSystemTimeAsFileTime(&time);
58.65 return GetCurrentProcessId() + time.dwHighDateTime + time.dwLowDateTime;
58.66 @@ -130,5 +134,37 @@
58.67 return getpid() + tv.tv_sec + tv.tv_usec;
58.68 #endif
58.69 }
58.70 +
58.71 + WinLock::WinLock() {
58.72 +#ifdef LEMON_WIN32
58.73 + CRITICAL_SECTION *lock = new CRITICAL_SECTION;
58.74 + InitializeCriticalSection(lock);
58.75 + _repr = lock;
58.76 +#else
58.77 + _repr = 0; //Just to avoid 'unused variable' warning with clang
58.78 +#endif
58.79 + }
58.80 +
58.81 + WinLock::~WinLock() {
58.82 +#ifdef LEMON_WIN32
58.83 + CRITICAL_SECTION *lock = static_cast<CRITICAL_SECTION*>(_repr);
58.84 + DeleteCriticalSection(lock);
58.85 + delete lock;
58.86 +#endif
58.87 + }
58.88 +
58.89 + void WinLock::lock() {
58.90 +#ifdef LEMON_WIN32
58.91 + CRITICAL_SECTION *lock = static_cast<CRITICAL_SECTION*>(_repr);
58.92 + EnterCriticalSection(lock);
58.93 +#endif
58.94 + }
58.95 +
58.96 + void WinLock::unlock() {
58.97 +#ifdef LEMON_WIN32
58.98 + CRITICAL_SECTION *lock = static_cast<CRITICAL_SECTION*>(_repr);
58.99 + LeaveCriticalSection(lock);
58.100 +#endif
58.101 + }
58.102 }
58.103 }
59.1 --- a/lemon/bits/windows.h Mon Jul 16 16:21:40 2018 +0200
59.2 +++ b/lemon/bits/windows.h Wed Oct 17 19:14:07 2018 +0200
59.3 @@ -2,7 +2,7 @@
59.4 *
59.5 * This file is a part of LEMON, a generic C++ optimization library.
59.6 *
59.7 - * Copyright (C) 2003-2009
59.8 + * Copyright (C) 2003-2013
59.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
59.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
59.11 *
59.12 @@ -19,6 +19,7 @@
59.13 #ifndef LEMON_BITS_WINDOWS_H
59.14 #define LEMON_BITS_WINDOWS_H
59.15
59.16 +#include <lemon/config.h>
59.17 #include <string>
59.18
59.19 namespace lemon {
59.20 @@ -28,6 +29,16 @@
59.21 double &cutime, double &cstime);
59.22 std::string getWinFormattedDate();
59.23 int getWinRndSeed();
59.24 +
59.25 + class WinLock {
59.26 + public:
59.27 + WinLock();
59.28 + ~WinLock();
59.29 + void lock();
59.30 + void unlock();\
59.31 + private:
59.32 + void *_repr;
59.33 + };
59.34 }
59.35 }
59.36
60.1 --- a/lemon/capacity_scaling.h Mon Jul 16 16:21:40 2018 +0200
60.2 +++ b/lemon/capacity_scaling.h Wed Oct 17 19:14:07 2018 +0200
60.3 @@ -2,7 +2,7 @@
60.4 *
60.5 * This file is a part of LEMON, a generic C++ optimization library.
60.6 *
60.7 - * Copyright (C) 2003-2010
60.8 + * Copyright (C) 2003-2013
60.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
60.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
60.11 *
60.12 @@ -27,6 +27,7 @@
60.13 #include <vector>
60.14 #include <limits>
60.15 #include <lemon/core.h>
60.16 +#include <lemon/maps.h>
60.17 #include <lemon/bin_heap.h>
60.18
60.19 namespace lemon {
60.20 @@ -66,9 +67,16 @@
60.21 ///
60.22 /// \ref CapacityScaling implements the capacity scaling version
60.23 /// of the successive shortest path algorithm for finding a
60.24 - /// \ref min_cost_flow "minimum cost flow" \ref amo93networkflows,
60.25 - /// \ref edmondskarp72theoretical. It is an efficient dual
60.26 - /// solution method.
60.27 + /// \ref min_cost_flow "minimum cost flow" \cite amo93networkflows,
60.28 + /// \cite edmondskarp72theoretical. It is an efficient dual
60.29 + /// solution method, which runs in polynomial time
60.30 + /// \f$O(m\log U (n+m)\log n)\f$, where <i>U</i> denotes the maximum
60.31 + /// of node supply and arc capacity values.
60.32 + ///
60.33 + /// This algorithm is typically slower than \ref CostScaling and
60.34 + /// \ref NetworkSimplex, but in special cases, it can be more
60.35 + /// efficient than them.
60.36 + /// (For more information, see \ref min_cost_flow_algs "the module page".)
60.37 ///
60.38 /// Most of the parameters of the problem (except for the digraph)
60.39 /// can be given using separate functions, and the algorithm can be
60.40 @@ -86,10 +94,11 @@
60.41 /// In most cases, this parameter should not be set directly,
60.42 /// consider to use the named template parameters instead.
60.43 ///
60.44 - /// \warning Both number types must be signed and all input data must
60.45 - /// be integer.
60.46 - /// \warning This algorithm does not support negative costs for such
60.47 - /// arcs that have infinite upper bound.
60.48 + /// \warning Both \c V and \c C must be signed number types.
60.49 + /// \warning Capacity bounds and supply values must be integer, but
60.50 + /// arc costs can be arbitrary real numbers.
60.51 + /// \warning This algorithm does not support negative costs for
60.52 + /// arcs having infinite upper bound.
60.53 #ifdef DOXYGEN
60.54 template <typename GR, typename V, typename C, typename TR>
60.55 #else
60.56 @@ -110,7 +119,8 @@
60.57 /// The type of the heap used for internal Dijkstra computations
60.58 typedef typename TR::Heap Heap;
60.59
60.60 - /// The \ref CapacityScalingDefaultTraits "traits class" of the algorithm
60.61 + /// \brief The \ref lemon::CapacityScalingDefaultTraits "traits class"
60.62 + /// of the algorithm
60.63 typedef TR Traits;
60.64
60.65 public:
60.66 @@ -154,7 +164,7 @@
60.67 int _root;
60.68
60.69 // Parameters of the problem
60.70 - bool _have_lower;
60.71 + bool _has_lower;
60.72 Value _sum_supply;
60.73
60.74 // Data structures for storing the digraph
60.75 @@ -347,10 +357,9 @@
60.76 /// \return <tt>(*this)</tt>
60.77 template <typename LowerMap>
60.78 CapacityScaling& lowerMap(const LowerMap& map) {
60.79 - _have_lower = true;
60.80 + _has_lower = true;
60.81 for (ArcIt a(_graph); a != INVALID; ++a) {
60.82 _lower[_arc_idf[a]] = map[a];
60.83 - _lower[_arc_idb[a]] = map[a];
60.84 }
60.85 return *this;
60.86 }
60.87 @@ -422,7 +431,7 @@
60.88 /// calling \ref run(), the supply of each node will be set to zero.
60.89 ///
60.90 /// Using this function has the same effect as using \ref supplyMap()
60.91 - /// with such a map in which \c k is assigned to \c s, \c -k is
60.92 + /// with a map in which \c k is assigned to \c s, \c -k is
60.93 /// assigned to \c t and all other nodes have zero supply value.
60.94 ///
60.95 /// \param s The source node.
60.96 @@ -534,7 +543,7 @@
60.97 _upper[j] = INF;
60.98 _cost[j] = _forward[j] ? 1 : -1;
60.99 }
60.100 - _have_lower = false;
60.101 + _has_lower = false;
60.102 return *this;
60.103 }
60.104
60.105 @@ -637,7 +646,7 @@
60.106 /// \brief Return the total cost of the found flow.
60.107 ///
60.108 /// This function returns the total cost of the found flow.
60.109 - /// Its complexity is O(e).
60.110 + /// Its complexity is O(m).
60.111 ///
60.112 /// \note The return type of the function can be specified as a
60.113 /// template parameter. For example,
60.114 @@ -675,7 +684,8 @@
60.115 return _res_cap[_arc_idb[a]];
60.116 }
60.117
60.118 - /// \brief Return the flow map (the primal solution).
60.119 + /// \brief Copy the flow values (the primal solution) into the
60.120 + /// given map.
60.121 ///
60.122 /// This function copies the flow value on each arc into the given
60.123 /// map. The \c Value type of the algorithm must be convertible to
60.124 @@ -699,7 +709,8 @@
60.125 return _pi[_node_id[n]];
60.126 }
60.127
60.128 - /// \brief Return the potential map (the dual solution).
60.129 + /// \brief Copy the potential values (the dual solution) into the
60.130 + /// given map.
60.131 ///
60.132 /// This function copies the potential (dual value) of each node
60.133 /// into the given map.
60.134 @@ -729,6 +740,11 @@
60.135 }
60.136 if (_sum_supply > 0) return INFEASIBLE;
60.137
60.138 + // Check lower and upper bounds
60.139 + LEMON_DEBUG(checkBoundMaps(),
60.140 + "Upper bounds must be greater or equal to the lower bounds");
60.141 +
60.142 +
60.143 // Initialize vectors
60.144 for (int i = 0; i != _root; ++i) {
60.145 _pi[i] = 0;
60.146 @@ -738,7 +754,7 @@
60.147 // Remove non-zero lower bounds
60.148 const Value MAX = std::numeric_limits<Value>::max();
60.149 int last_out;
60.150 - if (_have_lower) {
60.151 + if (_has_lower) {
60.152 for (int i = 0; i != _root; ++i) {
60.153 last_out = _first_out[i+1];
60.154 for (int j = _first_out[i]; j != last_out; ++j) {
60.155 @@ -823,6 +839,15 @@
60.156 return OPTIMAL;
60.157 }
60.158
60.159 + // Check if the upper bound is greater than or equal to the lower bound
60.160 + // on each forward arc.
60.161 + bool checkBoundMaps() {
60.162 + for (int j = 0; j != _res_arc_num; ++j) {
60.163 + if (_forward[j] && _upper[j] < _lower[j]) return false;
60.164 + }
60.165 + return true;
60.166 + }
60.167 +
60.168 ProblemType start() {
60.169 // Execute the algorithm
60.170 ProblemType pt;
60.171 @@ -832,10 +857,10 @@
60.172 pt = startWithoutScaling();
60.173
60.174 // Handle non-zero lower bounds
60.175 - if (_have_lower) {
60.176 + if (_has_lower) {
60.177 int limit = _first_out[_root];
60.178 for (int j = 0; j != limit; ++j) {
60.179 - if (!_forward[j]) _res_cap[j] += _lower[j];
60.180 + if (_forward[j]) _res_cap[_reverse[j]] += _lower[j];
60.181 }
60.182 }
60.183
61.1 --- a/lemon/cbc.cc Mon Jul 16 16:21:40 2018 +0200
61.2 +++ b/lemon/cbc.cc Wed Oct 17 19:14:07 2018 +0200
61.3 @@ -2,7 +2,7 @@
61.4 *
61.5 * This file is a part of LEMON, a generic C++ optimization library.
61.6 *
61.7 - * Copyright (C) 2003-2009
61.8 + * Copyright (C) 2003-2013
61.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
61.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
61.11 *
62.1 --- a/lemon/cbc.h Mon Jul 16 16:21:40 2018 +0200
62.2 +++ b/lemon/cbc.h Wed Oct 17 19:14:07 2018 +0200
62.3 @@ -2,7 +2,7 @@
62.4 *
62.5 * This file is a part of LEMON, a generic C++ optimization library.
62.6 *
62.7 - * Copyright (C) 2003-2010
62.8 + * Copyright (C) 2003-2013
62.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
62.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
62.11 *
62.12 @@ -16,7 +16,6 @@
62.13 *
62.14 */
62.15
62.16 -// -*- C++ -*-
62.17 #ifndef LEMON_CBC_H
62.18 #define LEMON_CBC_H
62.19
63.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
63.2 +++ b/lemon/christofides_tsp.h Wed Oct 17 19:14:07 2018 +0200
63.3 @@ -0,0 +1,254 @@
63.4 +/* -*- mode: C++; indent-tabs-mode: nil; -*-
63.5 + *
63.6 + * This file is a part of LEMON, a generic C++ optimization library.
63.7 + *
63.8 + * Copyright (C) 2003-2013
63.9 + * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
63.10 + * (Egervary Research Group on Combinatorial Optimization, EGRES).
63.11 + *
63.12 + * Permission to use, modify and distribute this software is granted
63.13 + * provided that this copyright notice appears in all copies. For
63.14 + * precise terms see the accompanying LICENSE file.
63.15 + *
63.16 + * This software is provided "AS IS" with no warranty of any kind,
63.17 + * express or implied, and with no claim as to its suitability for any
63.18 + * purpose.
63.19 + *
63.20 + */
63.21 +
63.22 +#ifndef LEMON_CHRISTOFIDES_TSP_H
63.23 +#define LEMON_CHRISTOFIDES_TSP_H
63.24 +
63.25 +/// \ingroup tsp
63.26 +/// \file
63.27 +/// \brief Christofides algorithm for symmetric TSP
63.28 +
63.29 +#include <lemon/full_graph.h>
63.30 +#include <lemon/smart_graph.h>
63.31 +#include <lemon/kruskal.h>
63.32 +#include <lemon/matching.h>
63.33 +#include <lemon/euler.h>
63.34 +
63.35 +namespace lemon {
63.36 +
63.37 + /// \ingroup tsp
63.38 + ///
63.39 + /// \brief Christofides algorithm for symmetric TSP.
63.40 + ///
63.41 + /// ChristofidesTsp implements Christofides' heuristic for solving
63.42 + /// symmetric \ref tsp "TSP".
63.43 + ///
63.44 + /// This a well-known approximation method for the TSP problem with
63.45 + /// metric cost function.
63.46 + /// It has a guaranteed approximation factor of 3/2 (i.e. it finds a tour
63.47 + /// whose total cost is at most 3/2 of the optimum), but it usually
63.48 + /// provides better solutions in practice.
63.49 + /// This implementation runs in O(n<sup>3</sup>log(n)) time.
63.50 + ///
63.51 + /// The algorithm starts with a \ref spantree "minimum cost spanning tree" and
63.52 + /// finds a \ref MaxWeightedPerfectMatching "minimum cost perfect matching"
63.53 + /// in the subgraph induced by the nodes that have odd degree in the
63.54 + /// spanning tree.
63.55 + /// Finally, it constructs the tour from the \ref EulerIt "Euler traversal"
63.56 + /// of the union of the spanning tree and the matching.
63.57 + /// During this last step, the algorithm simply skips the visited nodes
63.58 + /// (i.e. creates shortcuts) assuming that the triangle inequality holds
63.59 + /// for the cost function.
63.60 + ///
63.61 + /// \tparam CM Type of the cost map.
63.62 + ///
63.63 + /// \warning CM::Value must be a signed number type.
63.64 + template <typename CM>
63.65 + class ChristofidesTsp
63.66 + {
63.67 + public:
63.68 +
63.69 + /// Type of the cost map
63.70 + typedef CM CostMap;
63.71 + /// Type of the edge costs
63.72 + typedef typename CM::Value Cost;
63.73 +
63.74 + private:
63.75 +
63.76 + GRAPH_TYPEDEFS(FullGraph);
63.77 +
63.78 + const FullGraph &_gr;
63.79 + const CostMap &_cost;
63.80 + std::vector<Node> _path;
63.81 + Cost _sum;
63.82 +
63.83 + public:
63.84 +
63.85 + /// \brief Constructor
63.86 + ///
63.87 + /// Constructor.
63.88 + /// \param gr The \ref FullGraph "full graph" the algorithm runs on.
63.89 + /// \param cost The cost map.
63.90 + ChristofidesTsp(const FullGraph &gr, const CostMap &cost)
63.91 + : _gr(gr), _cost(cost) {}
63.92 +
63.93 + /// \name Execution Control
63.94 + /// @{
63.95 +
63.96 + /// \brief Runs the algorithm.
63.97 + ///
63.98 + /// This function runs the algorithm.
63.99 + ///
63.100 + /// \return The total cost of the found tour.
63.101 + Cost run() {
63.102 + _path.clear();
63.103 +
63.104 + if (_gr.nodeNum() == 0) return _sum = 0;
63.105 + else if (_gr.nodeNum() == 1) {
63.106 + _path.push_back(_gr(0));
63.107 + return _sum = 0;
63.108 + }
63.109 + else if (_gr.nodeNum() == 2) {
63.110 + _path.push_back(_gr(0));
63.111 + _path.push_back(_gr(1));
63.112 + return _sum = 2 * _cost[_gr.edge(_gr(0), _gr(1))];
63.113 + }
63.114 +
63.115 + // Compute min. cost spanning tree
63.116 + std::vector<Edge> tree;
63.117 + kruskal(_gr, _cost, std::back_inserter(tree));
63.118 +
63.119 + FullGraph::NodeMap<int> deg(_gr, 0);
63.120 + for (int i = 0; i != int(tree.size()); ++i) {
63.121 + Edge e = tree[i];
63.122 + ++deg[_gr.u(e)];
63.123 + ++deg[_gr.v(e)];
63.124 + }
63.125 +
63.126 + // Copy the induced subgraph of odd nodes
63.127 + std::vector<Node> odd_nodes;
63.128 + for (NodeIt u(_gr); u != INVALID; ++u) {
63.129 + if (deg[u] % 2 == 1) odd_nodes.push_back(u);
63.130 + }
63.131 +
63.132 + SmartGraph sgr;
63.133 + SmartGraph::EdgeMap<Cost> scost(sgr);
63.134 + for (int i = 0; i != int(odd_nodes.size()); ++i) {
63.135 + sgr.addNode();
63.136 + }
63.137 + for (int i = 0; i != int(odd_nodes.size()); ++i) {
63.138 + for (int j = 0; j != int(odd_nodes.size()); ++j) {
63.139 + if (j == i) continue;
63.140 + SmartGraph::Edge e =
63.141 + sgr.addEdge(sgr.nodeFromId(i), sgr.nodeFromId(j));
63.142 + scost[e] = -_cost[_gr.edge(odd_nodes[i], odd_nodes[j])];
63.143 + }
63.144 + }
63.145 +
63.146 + // Compute min. cost perfect matching
63.147 + MaxWeightedPerfectMatching<SmartGraph, SmartGraph::EdgeMap<Cost> >
63.148 + mwpm(sgr, scost);
63.149 + mwpm.run();
63.150 +
63.151 + for (SmartGraph::EdgeIt e(sgr); e != INVALID; ++e) {
63.152 + if (mwpm.matching(e)) {
63.153 + tree.push_back( _gr.edge(odd_nodes[sgr.id(sgr.u(e))],
63.154 + odd_nodes[sgr.id(sgr.v(e))]) );
63.155 + }
63.156 + }
63.157 +
63.158 + // Join the spanning tree and the matching
63.159 + sgr.clear();
63.160 + for (int i = 0; i != _gr.nodeNum(); ++i) {
63.161 + sgr.addNode();
63.162 + }
63.163 + for (int i = 0; i != int(tree.size()); ++i) {
63.164 + int ui = _gr.id(_gr.u(tree[i])),
63.165 + vi = _gr.id(_gr.v(tree[i]));
63.166 + sgr.addEdge(sgr.nodeFromId(ui), sgr.nodeFromId(vi));
63.167 + }
63.168 +
63.169 + // Compute the tour from the Euler traversal
63.170 + SmartGraph::NodeMap<bool> visited(sgr, false);
63.171 + for (EulerIt<SmartGraph> e(sgr); e != INVALID; ++e) {
63.172 + SmartGraph::Node n = sgr.target(e);
63.173 + if (!visited[n]) {
63.174 + _path.push_back(_gr(sgr.id(n)));
63.175 + visited[n] = true;
63.176 + }
63.177 + }
63.178 +
63.179 + _sum = _cost[_gr.edge(_path.back(), _path.front())];
63.180 + for (int i = 0; i < int(_path.size())-1; ++i) {
63.181 + _sum += _cost[_gr.edge(_path[i], _path[i+1])];
63.182 + }
63.183 +
63.184 + return _sum;
63.185 + }
63.186 +
63.187 + /// @}
63.188 +
63.189 + /// \name Query Functions
63.190 + /// @{
63.191 +
63.192 + /// \brief The total cost of the found tour.
63.193 + ///
63.194 + /// This function returns the total cost of the found tour.
63.195 + ///
63.196 + /// \pre run() must be called before using this function.
63.197 + Cost tourCost() const {
63.198 + return _sum;
63.199 + }
63.200 +
63.201 + /// \brief Returns a const reference to the node sequence of the
63.202 + /// found tour.
63.203 + ///
63.204 + /// This function returns a const reference to a vector
63.205 + /// that stores the node sequence of the found tour.
63.206 + ///
63.207 + /// \pre run() must be called before using this function.
63.208 + const std::vector<Node>& tourNodes() const {
63.209 + return _path;
63.210 + }
63.211 +
63.212 + /// \brief Gives back the node sequence of the found tour.
63.213 + ///
63.214 + /// This function copies the node sequence of the found tour into
63.215 + /// an STL container through the given output iterator. The
63.216 + /// <tt>value_type</tt> of the container must be <tt>FullGraph::Node</tt>.
63.217 + /// For example,
63.218 + /// \code
63.219 + /// std::vector<FullGraph::Node> nodes(countNodes(graph));
63.220 + /// tsp.tourNodes(nodes.begin());
63.221 + /// \endcode
63.222 + /// or
63.223 + /// \code
63.224 + /// std::list<FullGraph::Node> nodes;
63.225 + /// tsp.tourNodes(std::back_inserter(nodes));
63.226 + /// \endcode
63.227 + ///
63.228 + /// \pre run() must be called before using this function.
63.229 + template <typename Iterator>
63.230 + void tourNodes(Iterator out) const {
63.231 + std::copy(_path.begin(), _path.end(), out);
63.232 + }
63.233 +
63.234 + /// \brief Gives back the found tour as a path.
63.235 + ///
63.236 + /// This function copies the found tour as a list of arcs/edges into
63.237 + /// the given \ref lemon::concepts::Path "path structure".
63.238 + ///
63.239 + /// \pre run() must be called before using this function.
63.240 + template <typename Path>
63.241 + void tour(Path &path) const {
63.242 + path.clear();
63.243 + for (int i = 0; i < int(_path.size()) - 1; ++i) {
63.244 + path.addBack(_gr.arc(_path[i], _path[i+1]));
63.245 + }
63.246 + if (int(_path.size()) >= 2) {
63.247 + path.addBack(_gr.arc(_path.back(), _path.front()));
63.248 + }
63.249 + }
63.250 +
63.251 + /// @}
63.252 +
63.253 + };
63.254 +
63.255 +}; // namespace lemon
63.256 +
63.257 +#endif
64.1 --- a/lemon/circulation.h Mon Jul 16 16:21:40 2018 +0200
64.2 +++ b/lemon/circulation.h Wed Oct 17 19:14:07 2018 +0200
64.3 @@ -2,7 +2,7 @@
64.4 *
64.5 * This file is a part of LEMON, a generic C++ optimization library.
64.6 *
64.7 - * Copyright (C) 2003-2010
64.8 + * Copyright (C) 2003-2013
64.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
64.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
64.11 *
64.12 @@ -195,7 +195,8 @@
64.13 class Circulation {
64.14 public:
64.15
64.16 - ///The \ref CirculationDefaultTraits "traits class" of the algorithm.
64.17 + /// \brief The \ref lemon::CirculationDefaultTraits "traits class"
64.18 + /// of the algorithm.
64.19 typedef TR Traits;
64.20 ///The type of the digraph the algorithm runs on.
64.21 typedef typename Traits::Digraph Digraph;
65.1 --- a/lemon/clp.cc Mon Jul 16 16:21:40 2018 +0200
65.2 +++ b/lemon/clp.cc Wed Oct 17 19:14:07 2018 +0200
65.3 @@ -2,7 +2,7 @@
65.4 *
65.5 * This file is a part of LEMON, a generic C++ optimization library.
65.6 *
65.7 - * Copyright (C) 2003-2010
65.8 + * Copyright (C) 2003-2013
65.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
65.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
65.11 *
66.1 --- a/lemon/clp.h Mon Jul 16 16:21:40 2018 +0200
66.2 +++ b/lemon/clp.h Wed Oct 17 19:14:07 2018 +0200
66.3 @@ -2,7 +2,7 @@
66.4 *
66.5 * This file is a part of LEMON, a generic C++ optimization library.
66.6 *
66.7 - * Copyright (C) 2003-2010
66.8 + * Copyright (C) 2003-2013
66.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
66.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
66.11 *
67.1 --- a/lemon/concept_check.h Mon Jul 16 16:21:40 2018 +0200
67.2 +++ b/lemon/concept_check.h Wed Oct 17 19:14:07 2018 +0200
67.3 @@ -2,7 +2,7 @@
67.4 *
67.5 * This file is a part of LEMON, a generic C++ optimization library.
67.6 *
67.7 - * Copyright (C) 2003-2009
67.8 + * Copyright (C) 2003-2013
67.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
67.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
67.11 *
67.12 @@ -58,7 +58,7 @@
67.13 {
67.14 #if !defined(NDEBUG)
67.15 void (Concept::*x)() = & Concept::constraints;
67.16 - ignore_unused_variable_warning(x);
67.17 + ::lemon::ignore_unused_variable_warning(x);
67.18 #endif
67.19 }
67.20
67.21 @@ -68,7 +68,7 @@
67.22 #if !defined(NDEBUG)
67.23 typedef typename Concept::template Constraints<Type> ConceptCheck;
67.24 void (ConceptCheck::*x)() = & ConceptCheck::constraints;
67.25 - ignore_unused_variable_warning(x);
67.26 + ::lemon::ignore_unused_variable_warning(x);
67.27 #endif
67.28 }
67.29
68.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
68.2 +++ b/lemon/concepts/bpgraph.h Wed Oct 17 19:14:07 2018 +0200
68.3 @@ -0,0 +1,1029 @@
68.4 +/* -*- mode: C++; indent-tabs-mode: nil; -*-
68.5 + *
68.6 + * This file is a part of LEMON, a generic C++ optimization library.
68.7 + *
68.8 + * Copyright (C) 2003-2013
68.9 + * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
68.10 + * (Egervary Research Group on Combinatorial Optimization, EGRES).
68.11 + *
68.12 + * Permission to use, modify and distribute this software is granted
68.13 + * provided that this copyright notice appears in all copies. For
68.14 + * precise terms see the accompanying LICENSE file.
68.15 + *
68.16 + * This software is provided "AS IS" with no warranty of any kind,
68.17 + * express or implied, and with no claim as to its suitability for any
68.18 + * purpose.
68.19 + *
68.20 + */
68.21 +
68.22 +///\ingroup graph_concepts
68.23 +///\file
68.24 +///\brief The concept of undirected graphs.
68.25 +
68.26 +#ifndef LEMON_CONCEPTS_BPGRAPH_H
68.27 +#define LEMON_CONCEPTS_BPGRAPH_H
68.28 +
68.29 +#include <lemon/concepts/graph_components.h>
68.30 +#include <lemon/concepts/maps.h>
68.31 +#include <lemon/concept_check.h>
68.32 +#include <lemon/core.h>
68.33 +
68.34 +namespace lemon {
68.35 + namespace concepts {
68.36 +
68.37 + /// \ingroup graph_concepts
68.38 + ///
68.39 + /// \brief Class describing the concept of undirected bipartite graphs.
68.40 + ///
68.41 + /// This class describes the common interface of all undirected
68.42 + /// bipartite graphs.
68.43 + ///
68.44 + /// Like all concept classes, it only provides an interface
68.45 + /// without any sensible implementation. So any general algorithm for
68.46 + /// undirected bipartite graphs should compile with this class,
68.47 + /// but it will not run properly, of course.
68.48 + /// An actual graph implementation like \ref ListBpGraph or
68.49 + /// \ref SmartBpGraph may have additional functionality.
68.50 + ///
68.51 + /// The bipartite graphs also fulfill the concept of \ref Graph
68.52 + /// "undirected graphs". Bipartite graphs provide a bipartition of
68.53 + /// the node set, namely a red and blue set of the nodes. The
68.54 + /// nodes can be iterated with the RedNodeIt and BlueNodeIt in the
68.55 + /// two node sets. With RedNodeMap and BlueNodeMap values can be
68.56 + /// assigned to the nodes in the two sets.
68.57 + ///
68.58 + /// The edges of the graph cannot connect two nodes of the same
68.59 + /// set. The edges inherent orientation is from the red nodes to
68.60 + /// the blue nodes.
68.61 + ///
68.62 + /// \sa Graph
68.63 + class BpGraph {
68.64 + private:
68.65 + /// BpGraphs are \e not copy constructible. Use bpGraphCopy instead.
68.66 + BpGraph(const BpGraph&) {}
68.67 + /// \brief Assignment of a graph to another one is \e not allowed.
68.68 + /// Use bpGraphCopy instead.
68.69 + void operator=(const BpGraph&) {}
68.70 +
68.71 + public:
68.72 + /// Default constructor.
68.73 + BpGraph() {}
68.74 +
68.75 + /// \brief Undirected graphs should be tagged with \c UndirectedTag.
68.76 + ///
68.77 + /// Undirected graphs should be tagged with \c UndirectedTag.
68.78 + ///
68.79 + /// This tag helps the \c enable_if technics to make compile time
68.80 + /// specializations for undirected graphs.
68.81 + typedef True UndirectedTag;
68.82 +
68.83 + /// The node type of the graph
68.84 +
68.85 + /// This class identifies a node of the graph. It also serves
68.86 + /// as a base class of the node iterators,
68.87 + /// thus they convert to this type.
68.88 + class Node {
68.89 + public:
68.90 + /// Default constructor
68.91 +
68.92 + /// Default constructor.
68.93 + /// \warning It sets the object to an undefined value.
68.94 + Node() { }
68.95 + /// Copy constructor.
68.96 +
68.97 + /// Copy constructor.
68.98 + ///
68.99 + Node(const Node&) { }
68.100 +
68.101 + /// %Invalid constructor \& conversion.
68.102 +
68.103 + /// Initializes the object to be invalid.
68.104 + /// \sa Invalid for more details.
68.105 + Node(Invalid) { }
68.106 + /// Equality operator
68.107 +
68.108 + /// Equality operator.
68.109 + ///
68.110 + /// Two iterators are equal if and only if they point to the
68.111 + /// same object or both are \c INVALID.
68.112 + bool operator==(Node) const { return true; }
68.113 +
68.114 + /// Inequality operator
68.115 +
68.116 + /// Inequality operator.
68.117 + bool operator!=(Node) const { return true; }
68.118 +
68.119 + /// Artificial ordering operator.
68.120 +
68.121 + /// Artificial ordering operator.
68.122 + ///
68.123 + /// \note This operator only has to define some strict ordering of
68.124 + /// the items; this order has nothing to do with the iteration
68.125 + /// ordering of the items.
68.126 + bool operator<(Node) const { return false; }
68.127 +
68.128 + };
68.129 +
68.130 + /// Class to represent red nodes.
68.131 +
68.132 + /// This class represents the red nodes of the graph. It does
68.133 + /// not supposed to be used directly, because the nodes can be
68.134 + /// represented as Node instances. This class can be used as
68.135 + /// template parameter for special map classes.
68.136 + class RedNode : public Node {
68.137 + public:
68.138 + /// Default constructor
68.139 +
68.140 + /// Default constructor.
68.141 + /// \warning It sets the object to an undefined value.
68.142 + RedNode() { }
68.143 + /// Copy constructor.
68.144 +
68.145 + /// Copy constructor.
68.146 + ///
68.147 + RedNode(const RedNode&) : Node() { }
68.148 +
68.149 + /// %Invalid constructor \& conversion.
68.150 +
68.151 + /// Initializes the object to be invalid.
68.152 + /// \sa Invalid for more details.
68.153 + RedNode(Invalid) { }
68.154 +
68.155 + };
68.156 +
68.157 + /// Class to represent blue nodes.
68.158 +
68.159 + /// This class represents the blue nodes of the graph. It does
68.160 + /// not supposed to be used directly, because the nodes can be
68.161 + /// represented as Node instances. This class can be used as
68.162 + /// template parameter for special map classes.
68.163 + class BlueNode : public Node {
68.164 + public:
68.165 + /// Default constructor
68.166 +
68.167 + /// Default constructor.
68.168 + /// \warning It sets the object to an undefined value.
68.169 + BlueNode() { }
68.170 + /// Copy constructor.
68.171 +
68.172 + /// Copy constructor.
68.173 + ///
68.174 + BlueNode(const BlueNode&) : Node() { }
68.175 +
68.176 + /// %Invalid constructor \& conversion.
68.177 +
68.178 + /// Initializes the object to be invalid.
68.179 + /// \sa Invalid for more details.
68.180 + BlueNode(Invalid) { }
68.181 +
68.182 + };
68.183 +
68.184 + /// Iterator class for the red nodes.
68.185 +
68.186 + /// This iterator goes through each red node of the graph.
68.187 + /// Its usage is quite simple, for example, you can count the number
68.188 + /// of red nodes in a graph \c g of type \c %BpGraph like this:
68.189 + ///\code
68.190 + /// int count=0;
68.191 + /// for (BpGraph::RedNodeIt n(g); n!=INVALID; ++n) ++count;
68.192 + ///\endcode
68.193 + class RedNodeIt : public RedNode {
68.194 + public:
68.195 + /// Default constructor
68.196 +
68.197 + /// Default constructor.
68.198 + /// \warning It sets the iterator to an undefined value.
68.199 + RedNodeIt() { }
68.200 + /// Copy constructor.
68.201 +
68.202 + /// Copy constructor.
68.203 + ///
68.204 + RedNodeIt(const RedNodeIt& n) : RedNode(n) { }
68.205 + /// %Invalid constructor \& conversion.
68.206 +
68.207 + /// Initializes the iterator to be invalid.
68.208 + /// \sa Invalid for more details.
68.209 + RedNodeIt(Invalid) { }
68.210 + /// Sets the iterator to the first red node.
68.211 +
68.212 + /// Sets the iterator to the first red node of the given
68.213 + /// digraph.
68.214 + explicit RedNodeIt(const BpGraph&) { }
68.215 + /// Sets the iterator to the given red node.
68.216 +
68.217 + /// Sets the iterator to the given red node of the given
68.218 + /// digraph.
68.219 + RedNodeIt(const BpGraph&, const RedNode&) { }
68.220 + /// Next node.
68.221 +
68.222 + /// Assign the iterator to the next red node.
68.223 + ///
68.224 + RedNodeIt& operator++() { return *this; }
68.225 + };
68.226 +
68.227 + /// Iterator class for the blue nodes.
68.228 +
68.229 + /// This iterator goes through each blue node of the graph.
68.230 + /// Its usage is quite simple, for example, you can count the number
68.231 + /// of blue nodes in a graph \c g of type \c %BpGraph like this:
68.232 + ///\code
68.233 + /// int count=0;
68.234 + /// for (BpGraph::BlueNodeIt n(g); n!=INVALID; ++n) ++count;
68.235 + ///\endcode
68.236 + class BlueNodeIt : public BlueNode {
68.237 + public:
68.238 + /// Default constructor
68.239 +
68.240 + /// Default constructor.
68.241 + /// \warning It sets the iterator to an undefined value.
68.242 + BlueNodeIt() { }
68.243 + /// Copy constructor.
68.244 +
68.245 + /// Copy constructor.
68.246 + ///
68.247 + BlueNodeIt(const BlueNodeIt& n) : BlueNode(n) { }
68.248 + /// %Invalid constructor \& conversion.
68.249 +
68.250 + /// Initializes the iterator to be invalid.
68.251 + /// \sa Invalid for more details.
68.252 + BlueNodeIt(Invalid) { }
68.253 + /// Sets the iterator to the first blue node.
68.254 +
68.255 + /// Sets the iterator to the first blue node of the given
68.256 + /// digraph.
68.257 + explicit BlueNodeIt(const BpGraph&) { }
68.258 + /// Sets the iterator to the given blue node.
68.259 +
68.260 + /// Sets the iterator to the given blue node of the given
68.261 + /// digraph.
68.262 + BlueNodeIt(const BpGraph&, const BlueNode&) { }
68.263 + /// Next node.
68.264 +
68.265 + /// Assign the iterator to the next blue node.
68.266 + ///
68.267 + BlueNodeIt& operator++() { return *this; }
68.268 + };
68.269 +
68.270 + /// Iterator class for the nodes.
68.271 +
68.272 + /// This iterator goes through each node of the graph.
68.273 + /// Its usage is quite simple, for example, you can count the number
68.274 + /// of nodes in a graph \c g of type \c %BpGraph like this:
68.275 + ///\code
68.276 + /// int count=0;
68.277 + /// for (BpGraph::NodeIt n(g); n!=INVALID; ++n) ++count;
68.278 + ///\endcode
68.279 + class NodeIt : public Node {
68.280 + public:
68.281 + /// Default constructor
68.282 +
68.283 + /// Default constructor.
68.284 + /// \warning It sets the iterator to an undefined value.
68.285 + NodeIt() { }
68.286 + /// Copy constructor.
68.287 +
68.288 + /// Copy constructor.
68.289 + ///
68.290 + NodeIt(const NodeIt& n) : Node(n) { }
68.291 + /// %Invalid constructor \& conversion.
68.292 +
68.293 + /// Initializes the iterator to be invalid.
68.294 + /// \sa Invalid for more details.
68.295 + NodeIt(Invalid) { }
68.296 + /// Sets the iterator to the first node.
68.297 +
68.298 + /// Sets the iterator to the first node of the given digraph.
68.299 + ///
68.300 + explicit NodeIt(const BpGraph&) { }
68.301 + /// Sets the iterator to the given node.
68.302 +
68.303 + /// Sets the iterator to the given node of the given digraph.
68.304 + ///
68.305 + NodeIt(const BpGraph&, const Node&) { }
68.306 + /// Next node.
68.307 +
68.308 + /// Assign the iterator to the next node.
68.309 + ///
68.310 + NodeIt& operator++() { return *this; }
68.311 + };
68.312 +
68.313 +
68.314 + /// The edge type of the graph
68.315 +
68.316 + /// This class identifies an edge of the graph. It also serves
68.317 + /// as a base class of the edge iterators,
68.318 + /// thus they will convert to this type.
68.319 + class Edge {
68.320 + public:
68.321 + /// Default constructor
68.322 +
68.323 + /// Default constructor.
68.324 + /// \warning It sets the object to an undefined value.
68.325 + Edge() { }
68.326 + /// Copy constructor.
68.327 +
68.328 + /// Copy constructor.
68.329 + ///
68.330 + Edge(const Edge&) { }
68.331 + /// %Invalid constructor \& conversion.
68.332 +
68.333 + /// Initializes the object to be invalid.
68.334 + /// \sa Invalid for more details.
68.335 + Edge(Invalid) { }
68.336 + /// Equality operator
68.337 +
68.338 + /// Equality operator.
68.339 + ///
68.340 + /// Two iterators are equal if and only if they point to the
68.341 + /// same object or both are \c INVALID.
68.342 + bool operator==(Edge) const { return true; }
68.343 + /// Inequality operator
68.344 +
68.345 + /// Inequality operator.
68.346 + bool operator!=(Edge) const { return true; }
68.347 +
68.348 + /// Artificial ordering operator.
68.349 +
68.350 + /// Artificial ordering operator.
68.351 + ///
68.352 + /// \note This operator only has to define some strict ordering of
68.353 + /// the edges; this order has nothing to do with the iteration
68.354 + /// ordering of the edges.
68.355 + bool operator<(Edge) const { return false; }
68.356 + };
68.357 +
68.358 + /// Iterator class for the edges.
68.359 +
68.360 + /// This iterator goes through each edge of the graph.
68.361 + /// Its usage is quite simple, for example, you can count the number
68.362 + /// of edges in a graph \c g of type \c %BpGraph as follows:
68.363 + ///\code
68.364 + /// int count=0;
68.365 + /// for(BpGraph::EdgeIt e(g); e!=INVALID; ++e) ++count;
68.366 + ///\endcode
68.367 + class EdgeIt : public Edge {
68.368 + public:
68.369 + /// Default constructor
68.370 +
68.371 + /// Default constructor.
68.372 + /// \warning It sets the iterator to an undefined value.
68.373 + EdgeIt() { }
68.374 + /// Copy constructor.
68.375 +
68.376 + /// Copy constructor.
68.377 + ///
68.378 + EdgeIt(const EdgeIt& e) : Edge(e) { }
68.379 + /// %Invalid constructor \& conversion.
68.380 +
68.381 + /// Initializes the iterator to be invalid.
68.382 + /// \sa Invalid for more details.
68.383 + EdgeIt(Invalid) { }
68.384 + /// Sets the iterator to the first edge.
68.385 +
68.386 + /// Sets the iterator to the first edge of the given graph.
68.387 + ///
68.388 + explicit EdgeIt(const BpGraph&) { }
68.389 + /// Sets the iterator to the given edge.
68.390 +
68.391 + /// Sets the iterator to the given edge of the given graph.
68.392 + ///
68.393 + EdgeIt(const BpGraph&, const Edge&) { }
68.394 + /// Next edge
68.395 +
68.396 + /// Assign the iterator to the next edge.
68.397 + ///
68.398 + EdgeIt& operator++() { return *this; }
68.399 + };
68.400 +
68.401 + /// Iterator class for the incident edges of a node.
68.402 +
68.403 + /// This iterator goes trough the incident undirected edges
68.404 + /// of a certain node of a graph.
68.405 + /// Its usage is quite simple, for example, you can compute the
68.406 + /// degree (i.e. the number of incident edges) of a node \c n
68.407 + /// in a graph \c g of type \c %BpGraph as follows.
68.408 + ///
68.409 + ///\code
68.410 + /// int count=0;
68.411 + /// for(BpGraph::IncEdgeIt e(g, n); e!=INVALID; ++e) ++count;
68.412 + ///\endcode
68.413 + ///
68.414 + /// \warning Loop edges will be iterated twice.
68.415 + class IncEdgeIt : public Edge {
68.416 + public:
68.417 + /// Default constructor
68.418 +
68.419 + /// Default constructor.
68.420 + /// \warning It sets the iterator to an undefined value.
68.421 + IncEdgeIt() { }
68.422 + /// Copy constructor.
68.423 +
68.424 + /// Copy constructor.
68.425 + ///
68.426 + IncEdgeIt(const IncEdgeIt& e) : Edge(e) { }
68.427 + /// %Invalid constructor \& conversion.
68.428 +
68.429 + /// Initializes the iterator to be invalid.
68.430 + /// \sa Invalid for more details.
68.431 + IncEdgeIt(Invalid) { }
68.432 + /// Sets the iterator to the first incident edge.
68.433 +
68.434 + /// Sets the iterator to the first incident edge of the given node.
68.435 + ///
68.436 + IncEdgeIt(const BpGraph&, const Node&) { }
68.437 + /// Sets the iterator to the given edge.
68.438 +
68.439 + /// Sets the iterator to the given edge of the given graph.
68.440 + ///
68.441 + IncEdgeIt(const BpGraph&, const Edge&) { }
68.442 + /// Next incident edge
68.443 +
68.444 + /// Assign the iterator to the next incident edge
68.445 + /// of the corresponding node.
68.446 + IncEdgeIt& operator++() { return *this; }
68.447 + };
68.448 +
68.449 + /// The arc type of the graph
68.450 +
68.451 + /// This class identifies a directed arc of the graph. It also serves
68.452 + /// as a base class of the arc iterators,
68.453 + /// thus they will convert to this type.
68.454 + class Arc {
68.455 + public:
68.456 + /// Default constructor
68.457 +
68.458 + /// Default constructor.
68.459 + /// \warning It sets the object to an undefined value.
68.460 + Arc() { }
68.461 + /// Copy constructor.
68.462 +
68.463 + /// Copy constructor.
68.464 + ///
68.465 + Arc(const Arc&) { }
68.466 + /// %Invalid constructor \& conversion.
68.467 +
68.468 + /// Initializes the object to be invalid.
68.469 + /// \sa Invalid for more details.
68.470 + Arc(Invalid) { }
68.471 + /// Equality operator
68.472 +
68.473 + /// Equality operator.
68.474 + ///
68.475 + /// Two iterators are equal if and only if they point to the
68.476 + /// same object or both are \c INVALID.
68.477 + bool operator==(Arc) const { return true; }
68.478 + /// Inequality operator
68.479 +
68.480 + /// Inequality operator.
68.481 + bool operator!=(Arc) const { return true; }
68.482 +
68.483 + /// Artificial ordering operator.
68.484 +
68.485 + /// Artificial ordering operator.
68.486 + ///
68.487 + /// \note This operator only has to define some strict ordering of
68.488 + /// the arcs; this order has nothing to do with the iteration
68.489 + /// ordering of the arcs.
68.490 + bool operator<(Arc) const { return false; }
68.491 +
68.492 + /// Converison to \c Edge
68.493 +
68.494 + /// Converison to \c Edge.
68.495 + ///
68.496 + operator Edge() const { return Edge(); }
68.497 + };
68.498 +
68.499 + /// Iterator class for the arcs.
68.500 +
68.501 + /// This iterator goes through each directed arc of the graph.
68.502 + /// Its usage is quite simple, for example, you can count the number
68.503 + /// of arcs in a graph \c g of type \c %BpGraph as follows:
68.504 + ///\code
68.505 + /// int count=0;
68.506 + /// for(BpGraph::ArcIt a(g); a!=INVALID; ++a) ++count;
68.507 + ///\endcode
68.508 + class ArcIt : public Arc {
68.509 + public:
68.510 + /// Default constructor
68.511 +
68.512 + /// Default constructor.
68.513 + /// \warning It sets the iterator to an undefined value.
68.514 + ArcIt() { }
68.515 + /// Copy constructor.
68.516 +
68.517 + /// Copy constructor.
68.518 + ///
68.519 + ArcIt(const ArcIt& e) : Arc(e) { }
68.520 + /// %Invalid constructor \& conversion.
68.521 +
68.522 + /// Initializes the iterator to be invalid.
68.523 + /// \sa Invalid for more details.
68.524 + ArcIt(Invalid) { }
68.525 + /// Sets the iterator to the first arc.
68.526 +
68.527 + /// Sets the iterator to the first arc of the given graph.
68.528 + ///
68.529 + explicit ArcIt(const BpGraph &g)
68.530 + {
68.531 + ::lemon::ignore_unused_variable_warning(g);
68.532 + }
68.533 + /// Sets the iterator to the given arc.
68.534 +
68.535 + /// Sets the iterator to the given arc of the given graph.
68.536 + ///
68.537 + ArcIt(const BpGraph&, const Arc&) { }
68.538 + /// Next arc
68.539 +
68.540 + /// Assign the iterator to the next arc.
68.541 + ///
68.542 + ArcIt& operator++() { return *this; }
68.543 + };
68.544 +
68.545 + /// Iterator class for the outgoing arcs of a node.
68.546 +
68.547 + /// This iterator goes trough the \e outgoing directed arcs of a
68.548 + /// certain node of a graph.
68.549 + /// Its usage is quite simple, for example, you can count the number
68.550 + /// of outgoing arcs of a node \c n
68.551 + /// in a graph \c g of type \c %BpGraph as follows.
68.552 + ///\code
68.553 + /// int count=0;
68.554 + /// for (Digraph::OutArcIt a(g, n); a!=INVALID; ++a) ++count;
68.555 + ///\endcode
68.556 + class OutArcIt : public Arc {
68.557 + public:
68.558 + /// Default constructor
68.559 +
68.560 + /// Default constructor.
68.561 + /// \warning It sets the iterator to an undefined value.
68.562 + OutArcIt() { }
68.563 + /// Copy constructor.
68.564 +
68.565 + /// Copy constructor.
68.566 + ///
68.567 + OutArcIt(const OutArcIt& e) : Arc(e) { }
68.568 + /// %Invalid constructor \& conversion.
68.569 +
68.570 + /// Initializes the iterator to be invalid.
68.571 + /// \sa Invalid for more details.
68.572 + OutArcIt(Invalid) { }
68.573 + /// Sets the iterator to the first outgoing arc.
68.574 +
68.575 + /// Sets the iterator to the first outgoing arc of the given node.
68.576 + ///
68.577 + OutArcIt(const BpGraph& n, const Node& g) {
68.578 + ::lemon::ignore_unused_variable_warning(n);
68.579 + ::lemon::ignore_unused_variable_warning(g);
68.580 + }
68.581 + /// Sets the iterator to the given arc.
68.582 +
68.583 + /// Sets the iterator to the given arc of the given graph.
68.584 + ///
68.585 + OutArcIt(const BpGraph&, const Arc&) { }
68.586 + /// Next outgoing arc
68.587 +
68.588 + /// Assign the iterator to the next
68.589 + /// outgoing arc of the corresponding node.
68.590 + OutArcIt& operator++() { return *this; }
68.591 + };
68.592 +
68.593 + /// Iterator class for the incoming arcs of a node.
68.594 +
68.595 + /// This iterator goes trough the \e incoming directed arcs of a
68.596 + /// certain node of a graph.
68.597 + /// Its usage is quite simple, for example, you can count the number
68.598 + /// of incoming arcs of a node \c n
68.599 + /// in a graph \c g of type \c %BpGraph as follows.
68.600 + ///\code
68.601 + /// int count=0;
68.602 + /// for (Digraph::InArcIt a(g, n); a!=INVALID; ++a) ++count;
68.603 + ///\endcode
68.604 + class InArcIt : public Arc {
68.605 + public:
68.606 + /// Default constructor
68.607 +
68.608 + /// Default constructor.
68.609 + /// \warning It sets the iterator to an undefined value.
68.610 + InArcIt() { }
68.611 + /// Copy constructor.
68.612 +
68.613 + /// Copy constructor.
68.614 + ///
68.615 + InArcIt(const InArcIt& e) : Arc(e) { }
68.616 + /// %Invalid constructor \& conversion.
68.617 +
68.618 + /// Initializes the iterator to be invalid.
68.619 + /// \sa Invalid for more details.
68.620 + InArcIt(Invalid) { }
68.621 + /// Sets the iterator to the first incoming arc.
68.622 +
68.623 + /// Sets the iterator to the first incoming arc of the given node.
68.624 + ///
68.625 + InArcIt(const BpGraph& g, const Node& n) {
68.626 + ::lemon::ignore_unused_variable_warning(n);
68.627 + ::lemon::ignore_unused_variable_warning(g);
68.628 + }
68.629 + /// Sets the iterator to the given arc.
68.630 +
68.631 + /// Sets the iterator to the given arc of the given graph.
68.632 + ///
68.633 + InArcIt(const BpGraph&, const Arc&) { }
68.634 + /// Next incoming arc
68.635 +
68.636 + /// Assign the iterator to the next
68.637 + /// incoming arc of the corresponding node.
68.638 + InArcIt& operator++() { return *this; }
68.639 + };
68.640 +
68.641 + /// \brief Standard graph map type for the nodes.
68.642 + ///
68.643 + /// Standard graph map type for the nodes.
68.644 + /// It conforms to the ReferenceMap concept.
68.645 + template<class T>
68.646 + class NodeMap : public ReferenceMap<Node, T, T&, const T&>
68.647 + {
68.648 + public:
68.649 +
68.650 + /// Constructor
68.651 + explicit NodeMap(const BpGraph&) { }
68.652 + /// Constructor with given initial value
68.653 + NodeMap(const BpGraph&, T) { }
68.654 +
68.655 + private:
68.656 + ///Copy constructor
68.657 + NodeMap(const NodeMap& nm) :
68.658 + ReferenceMap<Node, T, T&, const T&>(nm) { }
68.659 + ///Assignment operator
68.660 + template <typename CMap>
68.661 + NodeMap& operator=(const CMap&) {
68.662 + checkConcept<ReadMap<Node, T>, CMap>();
68.663 + return *this;
68.664 + }
68.665 + };
68.666 +
68.667 + /// \brief Standard graph map type for the red nodes.
68.668 + ///
68.669 + /// Standard graph map type for the red nodes.
68.670 + /// It conforms to the ReferenceMap concept.
68.671 + template<class T>
68.672 + class RedNodeMap : public ReferenceMap<Node, T, T&, const T&>
68.673 + {
68.674 + public:
68.675 +
68.676 + /// Constructor
68.677 + explicit RedNodeMap(const BpGraph&) { }
68.678 + /// Constructor with given initial value
68.679 + RedNodeMap(const BpGraph&, T) { }
68.680 +
68.681 + private:
68.682 + ///Copy constructor
68.683 + RedNodeMap(const RedNodeMap& nm) :
68.684 + ReferenceMap<Node, T, T&, const T&>(nm) { }
68.685 + ///Assignment operator
68.686 + template <typename CMap>
68.687 + RedNodeMap& operator=(const CMap&) {
68.688 + checkConcept<ReadMap<Node, T>, CMap>();
68.689 + return *this;
68.690 + }
68.691 + };
68.692 +
68.693 + /// \brief Standard graph map type for the blue nodes.
68.694 + ///
68.695 + /// Standard graph map type for the blue nodes.
68.696 + /// It conforms to the ReferenceMap concept.
68.697 + template<class T>
68.698 + class BlueNodeMap : public ReferenceMap<Node, T, T&, const T&>
68.699 + {
68.700 + public:
68.701 +
68.702 + /// Constructor
68.703 + explicit BlueNodeMap(const BpGraph&) { }
68.704 + /// Constructor with given initial value
68.705 + BlueNodeMap(const BpGraph&, T) { }
68.706 +
68.707 + private:
68.708 + ///Copy constructor
68.709 + BlueNodeMap(const BlueNodeMap& nm) :
68.710 + ReferenceMap<Node, T, T&, const T&>(nm) { }
68.711 + ///Assignment operator
68.712 + template <typename CMap>
68.713 + BlueNodeMap& operator=(const CMap&) {
68.714 + checkConcept<ReadMap<Node, T>, CMap>();
68.715 + return *this;
68.716 + }
68.717 + };
68.718 +
68.719 + /// \brief Standard graph map type for the arcs.
68.720 + ///
68.721 + /// Standard graph map type for the arcs.
68.722 + /// It conforms to the ReferenceMap concept.
68.723 + template<class T>
68.724 + class ArcMap : public ReferenceMap<Arc, T, T&, const T&>
68.725 + {
68.726 + public:
68.727 +
68.728 + /// Constructor
68.729 + explicit ArcMap(const BpGraph&) { }
68.730 + /// Constructor with given initial value
68.731 + ArcMap(const BpGraph&, T) { }
68.732 +
68.733 + private:
68.734 + ///Copy constructor
68.735 + ArcMap(const ArcMap& em) :
68.736 + ReferenceMap<Arc, T, T&, const T&>(em) { }
68.737 + ///Assignment operator
68.738 + template <typename CMap>
68.739 + ArcMap& operator=(const CMap&) {
68.740 + checkConcept<ReadMap<Arc, T>, CMap>();
68.741 + return *this;
68.742 + }
68.743 + };
68.744 +
68.745 + /// \brief Standard graph map type for the edges.
68.746 + ///
68.747 + /// Standard graph map type for the edges.
68.748 + /// It conforms to the ReferenceMap concept.
68.749 + template<class T>
68.750 + class EdgeMap : public ReferenceMap<Edge, T, T&, const T&>
68.751 + {
68.752 + public:
68.753 +
68.754 + /// Constructor
68.755 + explicit EdgeMap(const BpGraph&) { }
68.756 + /// Constructor with given initial value
68.757 + EdgeMap(const BpGraph&, T) { }
68.758 +
68.759 + private:
68.760 + ///Copy constructor
68.761 + EdgeMap(const EdgeMap& em) :
68.762 + ReferenceMap<Edge, T, T&, const T&>(em) {}
68.763 + ///Assignment operator
68.764 + template <typename CMap>
68.765 + EdgeMap& operator=(const CMap&) {
68.766 + checkConcept<ReadMap<Edge, T>, CMap>();
68.767 + return *this;
68.768 + }
68.769 + };
68.770 +
68.771 + /// \brief Gives back %true for red nodes.
68.772 + ///
68.773 + /// Gives back %true for red nodes.
68.774 + bool red(const Node&) const { return true; }
68.775 +
68.776 + /// \brief Gives back %true for blue nodes.
68.777 + ///
68.778 + /// Gives back %true for blue nodes.
68.779 + bool blue(const Node&) const { return true; }
68.780 +
68.781 + /// \brief Converts the node to red node object.
68.782 + ///
68.783 + /// This function converts unsafely the node to red node
68.784 + /// object. It should be called only if the node is from the red
68.785 + /// partition or INVALID.
68.786 + RedNode asRedNodeUnsafe(const Node&) const { return RedNode(); }
68.787 +
68.788 + /// \brief Converts the node to blue node object.
68.789 + ///
68.790 + /// This function converts unsafely the node to blue node
68.791 + /// object. It should be called only if the node is from the red
68.792 + /// partition or INVALID.
68.793 + BlueNode asBlueNodeUnsafe(const Node&) const { return BlueNode(); }
68.794 +
68.795 + /// \brief Converts the node to red node object.
68.796 + ///
68.797 + /// This function converts safely the node to red node
68.798 + /// object. If the node is not from the red partition, then it
68.799 + /// returns INVALID.
68.800 + RedNode asRedNode(const Node&) const { return RedNode(); }
68.801 +
68.802 + /// \brief Converts the node to blue node object.
68.803 + ///
68.804 + /// This function converts unsafely the node to blue node
68.805 + /// object. If the node is not from the blue partition, then it
68.806 + /// returns INVALID.
68.807 + BlueNode asBlueNode(const Node&) const { return BlueNode(); }
68.808 +
68.809 + /// \brief Gives back the red end node of the edge.
68.810 + ///
68.811 + /// Gives back the red end node of the edge.
68.812 + RedNode redNode(const Edge&) const { return RedNode(); }
68.813 +
68.814 + /// \brief Gives back the blue end node of the edge.
68.815 + ///
68.816 + /// Gives back the blue end node of the edge.
68.817 + BlueNode blueNode(const Edge&) const { return BlueNode(); }
68.818 +
68.819 + /// \brief The first node of the edge.
68.820 + ///
68.821 + /// It is a synonim for the \c redNode().
68.822 + Node u(Edge) const { return INVALID; }
68.823 +
68.824 + /// \brief The second node of the edge.
68.825 + ///
68.826 + /// It is a synonim for the \c blueNode().
68.827 + Node v(Edge) const { return INVALID; }
68.828 +
68.829 + /// \brief The source node of the arc.
68.830 + ///
68.831 + /// Returns the source node of the given arc.
68.832 + Node source(Arc) const { return INVALID; }
68.833 +
68.834 + /// \brief The target node of the arc.
68.835 + ///
68.836 + /// Returns the target node of the given arc.
68.837 + Node target(Arc) const { return INVALID; }
68.838 +
68.839 + /// \brief The ID of the node.
68.840 + ///
68.841 + /// Returns the ID of the given node.
68.842 + int id(Node) const { return -1; }
68.843 +
68.844 + /// \brief The red ID of the node.
68.845 + ///
68.846 + /// Returns the red ID of the given node.
68.847 + int id(RedNode) const { return -1; }
68.848 +
68.849 + /// \brief The blue ID of the node.
68.850 + ///
68.851 + /// Returns the blue ID of the given node.
68.852 + int id(BlueNode) const { return -1; }
68.853 +
68.854 + /// \brief The ID of the edge.
68.855 + ///
68.856 + /// Returns the ID of the given edge.
68.857 + int id(Edge) const { return -1; }
68.858 +
68.859 + /// \brief The ID of the arc.
68.860 + ///
68.861 + /// Returns the ID of the given arc.
68.862 + int id(Arc) const { return -1; }
68.863 +
68.864 + /// \brief The node with the given ID.
68.865 + ///
68.866 + /// Returns the node with the given ID.
68.867 + /// \pre The argument should be a valid node ID in the graph.
68.868 + Node nodeFromId(int) const { return INVALID; }
68.869 +
68.870 + /// \brief The edge with the given ID.
68.871 + ///
68.872 + /// Returns the edge with the given ID.
68.873 + /// \pre The argument should be a valid edge ID in the graph.
68.874 + Edge edgeFromId(int) const { return INVALID; }
68.875 +
68.876 + /// \brief The arc with the given ID.
68.877 + ///
68.878 + /// Returns the arc with the given ID.
68.879 + /// \pre The argument should be a valid arc ID in the graph.
68.880 + Arc arcFromId(int) const { return INVALID; }
68.881 +
68.882 + /// \brief An upper bound on the node IDs.
68.883 + ///
68.884 + /// Returns an upper bound on the node IDs.
68.885 + int maxNodeId() const { return -1; }
68.886 +
68.887 + /// \brief An upper bound on the red IDs.
68.888 + ///
68.889 + /// Returns an upper bound on the red IDs.
68.890 + int maxRedId() const { return -1; }
68.891 +
68.892 + /// \brief An upper bound on the blue IDs.
68.893 + ///
68.894 + /// Returns an upper bound on the blue IDs.
68.895 + int maxBlueId() const { return -1; }
68.896 +
68.897 + /// \brief An upper bound on the edge IDs.
68.898 + ///
68.899 + /// Returns an upper bound on the edge IDs.
68.900 + int maxEdgeId() const { return -1; }
68.901 +
68.902 + /// \brief An upper bound on the arc IDs.
68.903 + ///
68.904 + /// Returns an upper bound on the arc IDs.
68.905 + int maxArcId() const { return -1; }
68.906 +
68.907 + /// \brief The direction of the arc.
68.908 + ///
68.909 + /// Returns \c true if the given arc goes from a red node to a blue node.
68.910 + bool direction(Arc) const { return true; }
68.911 +
68.912 + /// \brief Direct the edge.
68.913 + ///
68.914 + /// Direct the given edge. The returned arc
68.915 + /// represents the given edge and its direction comes
68.916 + /// from the bool parameter. If it is \c true, then the source of the node
68.917 + /// will be a red node.
68.918 + Arc direct(Edge, bool) const {
68.919 + return INVALID;
68.920 + }
68.921 +
68.922 + /// \brief Direct the edge.
68.923 + ///
68.924 + /// Direct the given edge. The returned arc represents the given
68.925 + /// edge and its source node is the given node.
68.926 + Arc direct(Edge, Node) const {
68.927 + return INVALID;
68.928 + }
68.929 +
68.930 + /// \brief The oppositely directed arc.
68.931 + ///
68.932 + /// Returns the oppositely directed arc representing the same edge.
68.933 + Arc oppositeArc(Arc) const { return INVALID; }
68.934 +
68.935 + /// \brief The opposite node on the edge.
68.936 + ///
68.937 + /// Returns the opposite node on the given edge.
68.938 + Node oppositeNode(Node, Edge) const { return INVALID; }
68.939 +
68.940 + void first(Node&) const {}
68.941 + void next(Node&) const {}
68.942 +
68.943 + void firstRed(RedNode&) const {}
68.944 + void nextRed(RedNode&) const {}
68.945 +
68.946 + void firstBlue(BlueNode&) const {}
68.947 + void nextBlue(BlueNode&) const {}
68.948 +
68.949 + void first(Edge&) const {}
68.950 + void next(Edge&) const {}
68.951 +
68.952 + void first(Arc&) const {}
68.953 + void next(Arc&) const {}
68.954 +
68.955 + void firstOut(Arc&, Node) const {}
68.956 + void nextOut(Arc&) const {}
68.957 +
68.958 + void firstIn(Arc&, Node) const {}
68.959 + void nextIn(Arc&) const {}
68.960 +
68.961 + void firstInc(Edge &, bool &, const Node &) const {}
68.962 + void nextInc(Edge &, bool &) const {}
68.963 +
68.964 + // The second parameter is dummy.
68.965 + Node fromId(int, Node) const { return INVALID; }
68.966 + // The second parameter is dummy.
68.967 + Edge fromId(int, Edge) const { return INVALID; }
68.968 + // The second parameter is dummy.
68.969 + Arc fromId(int, Arc) const { return INVALID; }
68.970 +
68.971 + // Dummy parameter.
68.972 + int maxId(Node) const { return -1; }
68.973 + // Dummy parameter.
68.974 + int maxId(RedNode) const { return -1; }
68.975 + // Dummy parameter.
68.976 + int maxId(BlueNode) const { return -1; }
68.977 + // Dummy parameter.
68.978 + int maxId(Edge) const { return -1; }
68.979 + // Dummy parameter.
68.980 + int maxId(Arc) const { return -1; }
68.981 +
68.982 + /// \brief The base node of the iterator.
68.983 + ///
68.984 + /// Returns the base node of the given incident edge iterator.
68.985 + Node baseNode(IncEdgeIt) const { return INVALID; }
68.986 +
68.987 + /// \brief The running node of the iterator.
68.988 + ///
68.989 + /// Returns the running node of the given incident edge iterator.
68.990 + Node runningNode(IncEdgeIt) const { return INVALID; }
68.991 +
68.992 + /// \brief The base node of the iterator.
68.993 + ///
68.994 + /// Returns the base node of the given outgoing arc iterator
68.995 + /// (i.e. the source node of the corresponding arc).
68.996 + Node baseNode(OutArcIt) const { return INVALID; }
68.997 +
68.998 + /// \brief The running node of the iterator.
68.999 + ///
68.1000 + /// Returns the running node of the given outgoing arc iterator
68.1001 + /// (i.e. the target node of the corresponding arc).
68.1002 + Node runningNode(OutArcIt) const { return INVALID; }
68.1003 +
68.1004 + /// \brief The base node of the iterator.
68.1005 + ///
68.1006 + /// Returns the base node of the given incoming arc iterator
68.1007 + /// (i.e. the target node of the corresponding arc).
68.1008 + Node baseNode(InArcIt) const { return INVALID; }
68.1009 +
68.1010 + /// \brief The running node of the iterator.
68.1011 + ///
68.1012 + /// Returns the running node of the given incoming arc iterator
68.1013 + /// (i.e. the source node of the corresponding arc).
68.1014 + Node runningNode(InArcIt) const { return INVALID; }
68.1015 +
68.1016 + template <typename _BpGraph>
68.1017 + struct Constraints {
68.1018 + void constraints() {
68.1019 + checkConcept<BaseBpGraphComponent, _BpGraph>();
68.1020 + checkConcept<IterableBpGraphComponent<>, _BpGraph>();
68.1021 + checkConcept<IDableBpGraphComponent<>, _BpGraph>();
68.1022 + checkConcept<MappableBpGraphComponent<>, _BpGraph>();
68.1023 + }
68.1024 + };
68.1025 +
68.1026 + };
68.1027 +
68.1028 + }
68.1029 +
68.1030 +}
68.1031 +
68.1032 +#endif
69.1 --- a/lemon/concepts/digraph.h Mon Jul 16 16:21:40 2018 +0200
69.2 +++ b/lemon/concepts/digraph.h Wed Oct 17 19:14:07 2018 +0200
69.3 @@ -2,7 +2,7 @@
69.4 *
69.5 * This file is a part of LEMON, a generic C++ optimization library.
69.6 *
69.7 - * Copyright (C) 2003-2010
69.8 + * Copyright (C) 2003-2013
69.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
69.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
69.11 *
69.12 @@ -312,7 +312,9 @@
69.13
69.14 /// Sets the iterator to the first arc of the given digraph.
69.15 ///
69.16 - explicit ArcIt(const Digraph& g) { ignore_unused_variable_warning(g); }
69.17 + explicit ArcIt(const Digraph& g) {
69.18 + ::lemon::ignore_unused_variable_warning(g);
69.19 + }
69.20 /// Sets the iterator to the given arc.
69.21
69.22 /// Sets the iterator to the given arc of the given digraph.
69.23 @@ -409,13 +411,13 @@
69.24
69.25 /// \brief The base node of the iterator.
69.26 ///
69.27 - /// Returns the base node of the given incomming arc iterator
69.28 + /// Returns the base node of the given incoming arc iterator
69.29 /// (i.e. the target node of the corresponding arc).
69.30 Node baseNode(InArcIt) const { return INVALID; }
69.31
69.32 /// \brief The running node of the iterator.
69.33 ///
69.34 - /// Returns the running node of the given incomming arc iterator
69.35 + /// Returns the running node of the given incoming arc iterator
69.36 /// (i.e. the source node of the corresponding arc).
69.37 Node runningNode(InArcIt) const { return INVALID; }
69.38
70.1 --- a/lemon/concepts/graph.h Mon Jul 16 16:21:40 2018 +0200
70.2 +++ b/lemon/concepts/graph.h Wed Oct 17 19:14:07 2018 +0200
70.3 @@ -2,7 +2,7 @@
70.4 *
70.5 * This file is a part of LEMON, a generic C++ optimization library.
70.6 *
70.7 - * Copyright (C) 2003-2010
70.8 + * Copyright (C) 2003-2013
70.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
70.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
70.11 *
70.12 @@ -72,10 +72,10 @@
70.13 /// \sa Digraph
70.14 class Graph {
70.15 private:
70.16 - /// Graphs are \e not copy constructible. Use DigraphCopy instead.
70.17 + /// Graphs are \e not copy constructible. Use GraphCopy instead.
70.18 Graph(const Graph&) {}
70.19 /// \brief Assignment of a graph to another one is \e not allowed.
70.20 - /// Use DigraphCopy instead.
70.21 + /// Use GraphCopy instead.
70.22 void operator=(const Graph&) {}
70.23
70.24 public:
70.25 @@ -396,7 +396,9 @@
70.26
70.27 /// Sets the iterator to the first arc of the given graph.
70.28 ///
70.29 - explicit ArcIt(const Graph &g) { ignore_unused_variable_warning(g); }
70.30 + explicit ArcIt(const Graph &g) {
70.31 + ::lemon::ignore_unused_variable_warning(g);
70.32 + }
70.33 /// Sets the iterator to the given arc.
70.34
70.35 /// Sets the iterator to the given arc of the given graph.
70.36 @@ -442,8 +444,8 @@
70.37 /// Sets the iterator to the first outgoing arc of the given node.
70.38 ///
70.39 OutArcIt(const Graph& n, const Node& g) {
70.40 - ignore_unused_variable_warning(n);
70.41 - ignore_unused_variable_warning(g);
70.42 + ::lemon::ignore_unused_variable_warning(n);
70.43 + ::lemon::ignore_unused_variable_warning(g);
70.44 }
70.45 /// Sets the iterator to the given arc.
70.46
70.47 @@ -490,8 +492,8 @@
70.48 /// Sets the iterator to the first incoming arc of the given node.
70.49 ///
70.50 InArcIt(const Graph& g, const Node& n) {
70.51 - ignore_unused_variable_warning(n);
70.52 - ignore_unused_variable_warning(g);
70.53 + ::lemon::ignore_unused_variable_warning(n);
70.54 + ::lemon::ignore_unused_variable_warning(g);
70.55 }
70.56 /// Sets the iterator to the given arc.
70.57
70.58 @@ -757,13 +759,13 @@
70.59
70.60 /// \brief The base node of the iterator.
70.61 ///
70.62 - /// Returns the base node of the given incomming arc iterator
70.63 + /// Returns the base node of the given incoming arc iterator
70.64 /// (i.e. the target node of the corresponding arc).
70.65 Node baseNode(InArcIt) const { return INVALID; }
70.66
70.67 /// \brief The running node of the iterator.
70.68 ///
70.69 - /// Returns the running node of the given incomming arc iterator
70.70 + /// Returns the running node of the given incoming arc iterator
70.71 /// (i.e. the source node of the corresponding arc).
70.72 Node runningNode(InArcIt) const { return INVALID; }
70.73
71.1 --- a/lemon/concepts/graph_components.h Mon Jul 16 16:21:40 2018 +0200
71.2 +++ b/lemon/concepts/graph_components.h Wed Oct 17 19:14:07 2018 +0200
71.3 @@ -2,7 +2,7 @@
71.4 *
71.5 * This file is a part of LEMON, a generic C++ optimization library.
71.6 *
71.7 - * Copyright (C) 2003-2010
71.8 + * Copyright (C) 2003-2013
71.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
71.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
71.11 *
71.12 @@ -108,6 +108,8 @@
71.13 i1 = i2 = i3;
71.14
71.15 bool b;
71.16 + ::lemon::ignore_unused_variable_warning(b);
71.17 +
71.18 b = (ia == ib) && (ia != ib);
71.19 b = (ia == INVALID) && (ib != INVALID);
71.20 b = (ia < ib);
71.21 @@ -287,7 +289,7 @@
71.22 e = graph.oppositeArc(e);
71.23 ue = e;
71.24 bool d = graph.direction(e);
71.25 - ignore_unused_variable_warning(d);
71.26 + ::lemon::ignore_unused_variable_warning(d);
71.27 }
71.28 }
71.29
71.30 @@ -297,6 +299,172 @@
71.31
71.32 };
71.33
71.34 + /// \brief Base skeleton class for undirected bipartite graphs.
71.35 + ///
71.36 + /// This class describes the base interface of undirected
71.37 + /// bipartite graph types. All bipartite graph %concepts have to
71.38 + /// conform to this class. It extends the interface of \ref
71.39 + /// BaseGraphComponent with an \c Edge type and functions to get
71.40 + /// the end nodes of edges, to convert from arcs to edges and to
71.41 + /// get both direction of edges.
71.42 + class BaseBpGraphComponent : public BaseGraphComponent {
71.43 + public:
71.44 +
71.45 + typedef BaseBpGraphComponent BpGraph;
71.46 +
71.47 + typedef BaseDigraphComponent::Node Node;
71.48 + typedef BaseDigraphComponent::Arc Arc;
71.49 +
71.50 + /// \brief Class to represent red nodes.
71.51 + ///
71.52 + /// This class represents the red nodes of the graph. The red
71.53 + /// nodes can also be used as normal nodes.
71.54 + class RedNode : public Node {
71.55 + typedef Node Parent;
71.56 +
71.57 + public:
71.58 + /// \brief Default constructor.
71.59 + ///
71.60 + /// Default constructor.
71.61 + /// \warning The default constructor is not required to set
71.62 + /// the item to some well-defined value. So you should consider it
71.63 + /// as uninitialized.
71.64 + RedNode() {}
71.65 +
71.66 + /// \brief Copy constructor.
71.67 + ///
71.68 + /// Copy constructor.
71.69 + RedNode(const RedNode &) : Parent() {}
71.70 +
71.71 + /// \brief Constructor for conversion from \c INVALID.
71.72 + ///
71.73 + /// Constructor for conversion from \c INVALID.
71.74 + /// It initializes the item to be invalid.
71.75 + /// \sa Invalid for more details.
71.76 + RedNode(Invalid) {}
71.77 + };
71.78 +
71.79 + /// \brief Class to represent blue nodes.
71.80 + ///
71.81 + /// This class represents the blue nodes of the graph. The blue
71.82 + /// nodes can also be used as normal nodes.
71.83 + class BlueNode : public Node {
71.84 + typedef Node Parent;
71.85 +
71.86 + public:
71.87 + /// \brief Default constructor.
71.88 + ///
71.89 + /// Default constructor.
71.90 + /// \warning The default constructor is not required to set
71.91 + /// the item to some well-defined value. So you should consider it
71.92 + /// as uninitialized.
71.93 + BlueNode() {}
71.94 +
71.95 + /// \brief Copy constructor.
71.96 + ///
71.97 + /// Copy constructor.
71.98 + BlueNode(const BlueNode &) : Parent() {}
71.99 +
71.100 + /// \brief Constructor for conversion from \c INVALID.
71.101 + ///
71.102 + /// Constructor for conversion from \c INVALID.
71.103 + /// It initializes the item to be invalid.
71.104 + /// \sa Invalid for more details.
71.105 + BlueNode(Invalid) {}
71.106 +
71.107 + /// \brief Constructor for conversion from a node.
71.108 + ///
71.109 + /// Constructor for conversion from a node. The conversion can
71.110 + /// be invalid, since the Node can be member of the red
71.111 + /// set.
71.112 + BlueNode(const Node&) {}
71.113 + };
71.114 +
71.115 + /// \brief Gives back %true for red nodes.
71.116 + ///
71.117 + /// Gives back %true for red nodes.
71.118 + bool red(const Node&) const { return true; }
71.119 +
71.120 + /// \brief Gives back %true for blue nodes.
71.121 + ///
71.122 + /// Gives back %true for blue nodes.
71.123 + bool blue(const Node&) const { return true; }
71.124 +
71.125 + /// \brief Gives back the red end node of the edge.
71.126 + ///
71.127 + /// Gives back the red end node of the edge.
71.128 + RedNode redNode(const Edge&) const { return RedNode(); }
71.129 +
71.130 + /// \brief Gives back the blue end node of the edge.
71.131 + ///
71.132 + /// Gives back the blue end node of the edge.
71.133 + BlueNode blueNode(const Edge&) const { return BlueNode(); }
71.134 +
71.135 + /// \brief Converts the node to red node object.
71.136 + ///
71.137 + /// This function converts unsafely the node to red node
71.138 + /// object. It should be called only if the node is from the red
71.139 + /// partition or INVALID.
71.140 + RedNode asRedNodeUnsafe(const Node&) const { return RedNode(); }
71.141 +
71.142 + /// \brief Converts the node to blue node object.
71.143 + ///
71.144 + /// This function converts unsafely the node to blue node
71.145 + /// object. It should be called only if the node is from the red
71.146 + /// partition or INVALID.
71.147 + BlueNode asBlueNodeUnsafe(const Node&) const { return BlueNode(); }
71.148 +
71.149 + /// \brief Converts the node to red node object.
71.150 + ///
71.151 + /// This function converts safely the node to red node
71.152 + /// object. If the node is not from the red partition, then it
71.153 + /// returns INVALID.
71.154 + RedNode asRedNode(const Node&) const { return RedNode(); }
71.155 +
71.156 + /// \brief Converts the node to blue node object.
71.157 + ///
71.158 + /// This function converts unsafely the node to blue node
71.159 + /// object. If the node is not from the blue partition, then it
71.160 + /// returns INVALID.
71.161 + BlueNode asBlueNode(const Node&) const { return BlueNode(); }
71.162 +
71.163 + template <typename _BpGraph>
71.164 + struct Constraints {
71.165 + typedef typename _BpGraph::Node Node;
71.166 + typedef typename _BpGraph::RedNode RedNode;
71.167 + typedef typename _BpGraph::BlueNode BlueNode;
71.168 + typedef typename _BpGraph::Arc Arc;
71.169 + typedef typename _BpGraph::Edge Edge;
71.170 +
71.171 + void constraints() {
71.172 + checkConcept<BaseGraphComponent, _BpGraph>();
71.173 + checkConcept<GraphItem<'n'>, RedNode>();
71.174 + checkConcept<GraphItem<'n'>, BlueNode>();
71.175 + {
71.176 + Node n;
71.177 + RedNode rn;
71.178 + BlueNode bn;
71.179 + Node rnan = rn;
71.180 + Node bnan = bn;
71.181 + Edge e;
71.182 + bool b;
71.183 + b = bpgraph.red(rnan);
71.184 + b = bpgraph.blue(bnan);
71.185 + rn = bpgraph.redNode(e);
71.186 + bn = bpgraph.blueNode(e);
71.187 + rn = bpgraph.asRedNodeUnsafe(rnan);
71.188 + bn = bpgraph.asBlueNodeUnsafe(bnan);
71.189 + rn = bpgraph.asRedNode(rnan);
71.190 + bn = bpgraph.asBlueNode(bnan);
71.191 + ::lemon::ignore_unused_variable_warning(b);
71.192 + }
71.193 + }
71.194 +
71.195 + const _BpGraph& bpgraph;
71.196 + };
71.197 +
71.198 + };
71.199 +
71.200 /// \brief Skeleton class for \e idable directed graphs.
71.201 ///
71.202 /// This class describes the interface of \e idable directed graphs.
71.203 @@ -366,9 +534,9 @@
71.204 arc = digraph.arcFromId(eid);
71.205
71.206 nid = digraph.maxNodeId();
71.207 - ignore_unused_variable_warning(nid);
71.208 + ::lemon::ignore_unused_variable_warning(nid);
71.209 eid = digraph.maxArcId();
71.210 - ignore_unused_variable_warning(eid);
71.211 + ::lemon::ignore_unused_variable_warning(eid);
71.212 }
71.213
71.214 const _Digraph& digraph;
71.215 @@ -421,7 +589,7 @@
71.216 ueid = graph.id(edge);
71.217 edge = graph.edgeFromId(ueid);
71.218 ueid = graph.maxEdgeId();
71.219 - ignore_unused_variable_warning(ueid);
71.220 + ::lemon::ignore_unused_variable_warning(ueid);
71.221 }
71.222
71.223 const _Graph& graph;
71.224 @@ -429,6 +597,70 @@
71.225 };
71.226 };
71.227
71.228 + /// \brief Skeleton class for \e idable undirected bipartite graphs.
71.229 + ///
71.230 + /// This class describes the interface of \e idable undirected
71.231 + /// bipartite graphs. It extends \ref IDableGraphComponent with
71.232 + /// the core ID functions of undirected bipartite graphs. Beside
71.233 + /// the regular node ids, this class also provides ids within the
71.234 + /// the red and blue sets of the nodes. This concept is part of
71.235 + /// the BpGraph concept.
71.236 + template <typename BAS = BaseBpGraphComponent>
71.237 + class IDableBpGraphComponent : public IDableGraphComponent<BAS> {
71.238 + public:
71.239 +
71.240 + typedef BAS Base;
71.241 + typedef IDableGraphComponent<BAS> Parent;
71.242 + typedef typename Base::Node Node;
71.243 + typedef typename Base::RedNode RedNode;
71.244 + typedef typename Base::BlueNode BlueNode;
71.245 +
71.246 + using Parent::id;
71.247 +
71.248 + /// \brief Return a unique integer id for the given node in the red set.
71.249 + ///
71.250 + /// Return a unique integer id for the given node in the red set.
71.251 + int id(const RedNode&) const { return -1; }
71.252 +
71.253 + /// \brief Return a unique integer id for the given node in the blue set.
71.254 + ///
71.255 + /// Return a unique integer id for the given node in the blue set.
71.256 + int id(const BlueNode&) const { return -1; }
71.257 +
71.258 + /// \brief Return an integer greater or equal to the maximum
71.259 + /// node id in the red set.
71.260 + ///
71.261 + /// Return an integer greater or equal to the maximum
71.262 + /// node id in the red set.
71.263 + int maxRedId() const { return -1; }
71.264 +
71.265 + /// \brief Return an integer greater or equal to the maximum
71.266 + /// node id in the blue set.
71.267 + ///
71.268 + /// Return an integer greater or equal to the maximum
71.269 + /// node id in the blue set.
71.270 + int maxBlueId() const { return -1; }
71.271 +
71.272 + template <typename _BpGraph>
71.273 + struct Constraints {
71.274 +
71.275 + void constraints() {
71.276 + checkConcept<IDableGraphComponent<Base>, _BpGraph>();
71.277 + typename _BpGraph::Node node;
71.278 + typename _BpGraph::RedNode red;
71.279 + typename _BpGraph::BlueNode blue;
71.280 + int rid = bpgraph.id(red);
71.281 + int bid = bpgraph.id(blue);
71.282 + rid = bpgraph.maxRedId();
71.283 + bid = bpgraph.maxBlueId();
71.284 + ::lemon::ignore_unused_variable_warning(rid);
71.285 + ::lemon::ignore_unused_variable_warning(bid);
71.286 + }
71.287 +
71.288 + const _BpGraph& bpgraph;
71.289 + };
71.290 + };
71.291 +
71.292 /// \brief Concept class for \c NodeIt, \c ArcIt and \c EdgeIt types.
71.293 ///
71.294 /// This class describes the concept of \c NodeIt, \c ArcIt and
71.295 @@ -494,8 +726,8 @@
71.296 _GraphItemIt it2;
71.297 _GraphItemIt it3 = it1;
71.298 _GraphItemIt it4 = INVALID;
71.299 - ignore_unused_variable_warning(it3);
71.300 - ignore_unused_variable_warning(it4);
71.301 + ::lemon::ignore_unused_variable_warning(it3);
71.302 + ::lemon::ignore_unused_variable_warning(it4);
71.303
71.304 it2 = ++it1;
71.305 ++it2 = it1;
71.306 @@ -585,8 +817,8 @@
71.307 _GraphIncIt it2;
71.308 _GraphIncIt it3 = it1;
71.309 _GraphIncIt it4 = INVALID;
71.310 - ignore_unused_variable_warning(it3);
71.311 - ignore_unused_variable_warning(it4);
71.312 + ::lemon::ignore_unused_variable_warning(it3);
71.313 + ::lemon::ignore_unused_variable_warning(it4);
71.314
71.315 it2 = ++it1;
71.316 ++it2 = it1;
71.317 @@ -643,15 +875,15 @@
71.318 /// This function gives back the next arc in the iteration order.
71.319 void next(Arc&) const {}
71.320
71.321 - /// \brief Return the first arc incomming to the given node.
71.322 + /// \brief Return the first arc incoming to the given node.
71.323 ///
71.324 - /// This function gives back the first arc incomming to the
71.325 + /// This function gives back the first arc incoming to the
71.326 /// given node.
71.327 void firstIn(Arc&, const Node&) const {}
71.328
71.329 - /// \brief Return the next arc incomming to the given node.
71.330 + /// \brief Return the next arc incoming to the given node.
71.331 ///
71.332 - /// This function gives back the next arc incomming to the
71.333 + /// This function gives back the next arc incoming to the
71.334 /// given node.
71.335 void nextIn(Arc&) const {}
71.336
71.337 @@ -768,7 +1000,7 @@
71.338 n = digraph.runningNode(iait);
71.339 n = digraph.baseNode(oait);
71.340 n = digraph.runningNode(oait);
71.341 - ignore_unused_variable_warning(n);
71.342 + ::lemon::ignore_unused_variable_warning(n);
71.343 }
71.344 }
71.345
71.346 @@ -902,6 +1134,97 @@
71.347 };
71.348 };
71.349
71.350 + /// \brief Skeleton class for iterable undirected bipartite graphs.
71.351 + ///
71.352 + /// This class describes the interface of iterable undirected
71.353 + /// bipartite graphs. It extends \ref IterableGraphComponent with
71.354 + /// the core iterable interface of undirected bipartite graphs.
71.355 + /// This concept is part of the BpGraph concept.
71.356 + template <typename BAS = BaseBpGraphComponent>
71.357 + class IterableBpGraphComponent : public IterableGraphComponent<BAS> {
71.358 + public:
71.359 +
71.360 + typedef BAS Base;
71.361 + typedef typename Base::Node Node;
71.362 + typedef typename Base::RedNode RedNode;
71.363 + typedef typename Base::BlueNode BlueNode;
71.364 + typedef typename Base::Arc Arc;
71.365 + typedef typename Base::Edge Edge;
71.366 +
71.367 + typedef IterableBpGraphComponent BpGraph;
71.368 +
71.369 + using IterableGraphComponent<BAS>::first;
71.370 + using IterableGraphComponent<BAS>::next;
71.371 +
71.372 + /// \name Base Iteration
71.373 + ///
71.374 + /// This interface provides functions for iteration on red and blue nodes.
71.375 + ///
71.376 + /// @{
71.377 +
71.378 + /// \brief Return the first red node.
71.379 + ///
71.380 + /// This function gives back the first red node in the iteration order.
71.381 + void first(RedNode&) const {}
71.382 +
71.383 + /// \brief Return the next red node.
71.384 + ///
71.385 + /// This function gives back the next red node in the iteration order.
71.386 + void next(RedNode&) const {}
71.387 +
71.388 + /// \brief Return the first blue node.
71.389 + ///
71.390 + /// This function gives back the first blue node in the iteration order.
71.391 + void first(BlueNode&) const {}
71.392 +
71.393 + /// \brief Return the next blue node.
71.394 + ///
71.395 + /// This function gives back the next blue node in the iteration order.
71.396 + void next(BlueNode&) const {}
71.397 +
71.398 +
71.399 + /// @}
71.400 +
71.401 + /// \name Class Based Iteration
71.402 + ///
71.403 + /// This interface provides iterator classes for red and blue nodes.
71.404 + ///
71.405 + /// @{
71.406 +
71.407 + /// \brief This iterator goes through each red node.
71.408 + ///
71.409 + /// This iterator goes through each red node.
71.410 + typedef GraphItemIt<BpGraph, RedNode> RedNodeIt;
71.411 +
71.412 + /// \brief This iterator goes through each blue node.
71.413 + ///
71.414 + /// This iterator goes through each blue node.
71.415 + typedef GraphItemIt<BpGraph, BlueNode> BlueNodeIt;
71.416 +
71.417 + /// @}
71.418 +
71.419 + template <typename _BpGraph>
71.420 + struct Constraints {
71.421 + void constraints() {
71.422 + checkConcept<IterableGraphComponent<Base>, _BpGraph>();
71.423 +
71.424 + typename _BpGraph::RedNode rn(INVALID);
71.425 + bpgraph.first(rn);
71.426 + bpgraph.next(rn);
71.427 + typename _BpGraph::BlueNode bn(INVALID);
71.428 + bpgraph.first(bn);
71.429 + bpgraph.next(bn);
71.430 +
71.431 + checkConcept<GraphItemIt<_BpGraph, typename _BpGraph::RedNode>,
71.432 + typename _BpGraph::RedNodeIt>();
71.433 + checkConcept<GraphItemIt<_BpGraph, typename _BpGraph::BlueNode>,
71.434 + typename _BpGraph::BlueNodeIt>();
71.435 + }
71.436 +
71.437 + const _BpGraph& bpgraph;
71.438 + };
71.439 + };
71.440 +
71.441 /// \brief Skeleton class for alterable directed graphs.
71.442 ///
71.443 /// This class describes the interface of alterable directed
71.444 @@ -927,18 +1250,21 @@
71.445 typedef AlterationNotifier<AlterableDigraphComponent, Arc>
71.446 ArcNotifier;
71.447
71.448 + mutable NodeNotifier node_notifier;
71.449 + mutable ArcNotifier arc_notifier;
71.450 +
71.451 /// \brief Return the node alteration notifier.
71.452 ///
71.453 /// This function gives back the node alteration notifier.
71.454 NodeNotifier& notifier(Node) const {
71.455 - return NodeNotifier();
71.456 + return node_notifier;
71.457 }
71.458
71.459 /// \brief Return the arc alteration notifier.
71.460 ///
71.461 /// This function gives back the arc alteration notifier.
71.462 ArcNotifier& notifier(Arc) const {
71.463 - return ArcNotifier();
71.464 + return arc_notifier;
71.465 }
71.466
71.467 template <typename _Digraph>
71.468 @@ -951,8 +1277,8 @@
71.469 typename _Digraph::ArcNotifier& en
71.470 = digraph.notifier(typename _Digraph::Arc());
71.471
71.472 - ignore_unused_variable_warning(nn);
71.473 - ignore_unused_variable_warning(en);
71.474 + ::lemon::ignore_unused_variable_warning(nn);
71.475 + ::lemon::ignore_unused_variable_warning(en);
71.476 }
71.477
71.478 const _Digraph& digraph;
71.479 @@ -974,6 +1300,7 @@
71.480 public:
71.481
71.482 typedef BAS Base;
71.483 + typedef AlterableDigraphComponent<Base> Parent;
71.484 typedef typename Base::Edge Edge;
71.485
71.486
71.487 @@ -981,11 +1308,15 @@
71.488 typedef AlterationNotifier<AlterableGraphComponent, Edge>
71.489 EdgeNotifier;
71.490
71.491 + mutable EdgeNotifier edge_notifier;
71.492 +
71.493 + using Parent::notifier;
71.494 +
71.495 /// \brief Return the edge alteration notifier.
71.496 ///
71.497 /// This function gives back the edge alteration notifier.
71.498 EdgeNotifier& notifier(Edge) const {
71.499 - return EdgeNotifier();
71.500 + return edge_notifier;
71.501 }
71.502
71.503 template <typename _Graph>
71.504 @@ -994,7 +1325,7 @@
71.505 checkConcept<AlterableDigraphComponent<Base>, _Graph>();
71.506 typename _Graph::EdgeNotifier& uen
71.507 = graph.notifier(typename _Graph::Edge());
71.508 - ignore_unused_variable_warning(uen);
71.509 + ::lemon::ignore_unused_variable_warning(uen);
71.510 }
71.511
71.512 const _Graph& graph;
71.513 @@ -1002,6 +1333,68 @@
71.514 };
71.515 };
71.516
71.517 + /// \brief Skeleton class for alterable undirected bipartite graphs.
71.518 + ///
71.519 + /// This class describes the interface of alterable undirected
71.520 + /// bipartite graphs. It extends \ref AlterableGraphComponent with
71.521 + /// the alteration notifier interface of bipartite graphs. It
71.522 + /// implements an observer-notifier pattern for the red and blue
71.523 + /// nodes. More obsevers can be registered into the notifier and
71.524 + /// whenever an alteration occured in the graph all the observers
71.525 + /// will be notified about it.
71.526 + template <typename BAS = BaseBpGraphComponent>
71.527 + class AlterableBpGraphComponent : public AlterableGraphComponent<BAS> {
71.528 + public:
71.529 +
71.530 + typedef BAS Base;
71.531 + typedef AlterableGraphComponent<Base> Parent;
71.532 + typedef typename Base::RedNode RedNode;
71.533 + typedef typename Base::BlueNode BlueNode;
71.534 +
71.535 +
71.536 + /// Red node alteration notifier class.
71.537 + typedef AlterationNotifier<AlterableBpGraphComponent, RedNode>
71.538 + RedNodeNotifier;
71.539 +
71.540 + /// Blue node alteration notifier class.
71.541 + typedef AlterationNotifier<AlterableBpGraphComponent, BlueNode>
71.542 + BlueNodeNotifier;
71.543 +
71.544 + mutable RedNodeNotifier red_node_notifier;
71.545 + mutable BlueNodeNotifier blue_node_notifier;
71.546 +
71.547 + using Parent::notifier;
71.548 +
71.549 + /// \brief Return the red node alteration notifier.
71.550 + ///
71.551 + /// This function gives back the red node alteration notifier.
71.552 + RedNodeNotifier& notifier(RedNode) const {
71.553 + return red_node_notifier;
71.554 + }
71.555 +
71.556 + /// \brief Return the blue node alteration notifier.
71.557 + ///
71.558 + /// This function gives back the blue node alteration notifier.
71.559 + BlueNodeNotifier& notifier(BlueNode) const {
71.560 + return blue_node_notifier;
71.561 + }
71.562 +
71.563 + template <typename _BpGraph>
71.564 + struct Constraints {
71.565 + void constraints() {
71.566 + checkConcept<AlterableGraphComponent<Base>, _BpGraph>();
71.567 + typename _BpGraph::RedNodeNotifier& rnn
71.568 + = bpgraph.notifier(typename _BpGraph::RedNode());
71.569 + typename _BpGraph::BlueNodeNotifier& bnn
71.570 + = bpgraph.notifier(typename _BpGraph::BlueNode());
71.571 + ::lemon::ignore_unused_variable_warning(rnn);
71.572 + ::lemon::ignore_unused_variable_warning(bnn);
71.573 + }
71.574 +
71.575 + const _BpGraph& bpgraph;
71.576 + };
71.577 + };
71.578 +
71.579 /// \brief Concept class for standard graph maps.
71.580 ///
71.581 /// This class describes the concept of standard graph maps, i.e.
71.582 @@ -1068,9 +1461,9 @@
71.583 // ReadMap<Key, Value> cmap;
71.584 // m3 = cmap;
71.585
71.586 - ignore_unused_variable_warning(m1);
71.587 - ignore_unused_variable_warning(m2);
71.588 - // ignore_unused_variable_warning(m3);
71.589 + ::lemon::ignore_unused_variable_warning(m1);
71.590 + ::lemon::ignore_unused_variable_warning(m2);
71.591 + // ::lemon::ignore_unused_variable_warning(m3);
71.592 }
71.593
71.594 const _Map &m;
71.595 @@ -1305,6 +1698,150 @@
71.596 };
71.597 };
71.598
71.599 + /// \brief Skeleton class for mappable undirected bipartite graphs.
71.600 + ///
71.601 + /// This class describes the interface of mappable undirected
71.602 + /// bipartite graphs. It extends \ref MappableGraphComponent with
71.603 + /// the standard graph map class for red and blue nodes (\c
71.604 + /// RedNodeMap and BlueNodeMap). This concept is part of the
71.605 + /// BpGraph concept.
71.606 + template <typename BAS = BaseBpGraphComponent>
71.607 + class MappableBpGraphComponent : public MappableGraphComponent<BAS> {
71.608 + public:
71.609 +
71.610 + typedef BAS Base;
71.611 + typedef typename Base::Node Node;
71.612 +
71.613 + typedef MappableBpGraphComponent BpGraph;
71.614 +
71.615 + /// \brief Standard graph map for the red nodes.
71.616 + ///
71.617 + /// Standard graph map for the red nodes.
71.618 + /// It conforms to the ReferenceMap concept.
71.619 + template <typename V>
71.620 + class RedNodeMap : public GraphMap<MappableBpGraphComponent, Node, V> {
71.621 + typedef GraphMap<MappableBpGraphComponent, Node, V> Parent;
71.622 +
71.623 + public:
71.624 + /// \brief Construct a new map.
71.625 + ///
71.626 + /// Construct a new map for the graph.
71.627 + explicit RedNodeMap(const MappableBpGraphComponent& graph)
71.628 + : Parent(graph) {}
71.629 +
71.630 + /// \brief Construct a new map with default value.
71.631 + ///
71.632 + /// Construct a new map for the graph and initalize the values.
71.633 + RedNodeMap(const MappableBpGraphComponent& graph, const V& value)
71.634 + : Parent(graph, value) {}
71.635 +
71.636 + private:
71.637 + /// \brief Copy constructor.
71.638 + ///
71.639 + /// Copy Constructor.
71.640 + RedNodeMap(const RedNodeMap& nm) : Parent(nm) {}
71.641 +
71.642 + /// \brief Assignment operator.
71.643 + ///
71.644 + /// Assignment operator.
71.645 + template <typename CMap>
71.646 + RedNodeMap& operator=(const CMap&) {
71.647 + checkConcept<ReadMap<Node, V>, CMap>();
71.648 + return *this;
71.649 + }
71.650 +
71.651 + };
71.652 +
71.653 + /// \brief Standard graph map for the blue nodes.
71.654 + ///
71.655 + /// Standard graph map for the blue nodes.
71.656 + /// It conforms to the ReferenceMap concept.
71.657 + template <typename V>
71.658 + class BlueNodeMap : public GraphMap<MappableBpGraphComponent, Node, V> {
71.659 + typedef GraphMap<MappableBpGraphComponent, Node, V> Parent;
71.660 +
71.661 + public:
71.662 + /// \brief Construct a new map.
71.663 + ///
71.664 + /// Construct a new map for the graph.
71.665 + explicit BlueNodeMap(const MappableBpGraphComponent& graph)
71.666 + : Parent(graph) {}
71.667 +
71.668 + /// \brief Construct a new map with default value.
71.669 + ///
71.670 + /// Construct a new map for the graph and initalize the values.
71.671 + BlueNodeMap(const MappableBpGraphComponent& graph, const V& value)
71.672 + : Parent(graph, value) {}
71.673 +
71.674 + private:
71.675 + /// \brief Copy constructor.
71.676 + ///
71.677 + /// Copy Constructor.
71.678 + BlueNodeMap(const BlueNodeMap& nm) : Parent(nm) {}
71.679 +
71.680 + /// \brief Assignment operator.
71.681 + ///
71.682 + /// Assignment operator.
71.683 + template <typename CMap>
71.684 + BlueNodeMap& operator=(const CMap&) {
71.685 + checkConcept<ReadMap<Node, V>, CMap>();
71.686 + return *this;
71.687 + }
71.688 +
71.689 + };
71.690 +
71.691 +
71.692 + template <typename _BpGraph>
71.693 + struct Constraints {
71.694 +
71.695 + struct Dummy {
71.696 + int value;
71.697 + Dummy() : value(0) {}
71.698 + Dummy(int _v) : value(_v) {}
71.699 + };
71.700 +
71.701 + void constraints() {
71.702 + checkConcept<MappableGraphComponent<Base>, _BpGraph>();
71.703 +
71.704 + { // int map test
71.705 + typedef typename _BpGraph::template RedNodeMap<int>
71.706 + IntRedNodeMap;
71.707 + checkConcept<GraphMap<_BpGraph, typename _BpGraph::RedNode, int>,
71.708 + IntRedNodeMap >();
71.709 + } { // bool map test
71.710 + typedef typename _BpGraph::template RedNodeMap<bool>
71.711 + BoolRedNodeMap;
71.712 + checkConcept<GraphMap<_BpGraph, typename _BpGraph::RedNode, bool>,
71.713 + BoolRedNodeMap >();
71.714 + } { // Dummy map test
71.715 + typedef typename _BpGraph::template RedNodeMap<Dummy>
71.716 + DummyRedNodeMap;
71.717 + checkConcept<GraphMap<_BpGraph, typename _BpGraph::RedNode, Dummy>,
71.718 + DummyRedNodeMap >();
71.719 + }
71.720 +
71.721 + { // int map test
71.722 + typedef typename _BpGraph::template BlueNodeMap<int>
71.723 + IntBlueNodeMap;
71.724 + checkConcept<GraphMap<_BpGraph, typename _BpGraph::BlueNode, int>,
71.725 + IntBlueNodeMap >();
71.726 + } { // bool map test
71.727 + typedef typename _BpGraph::template BlueNodeMap<bool>
71.728 + BoolBlueNodeMap;
71.729 + checkConcept<GraphMap<_BpGraph, typename _BpGraph::BlueNode, bool>,
71.730 + BoolBlueNodeMap >();
71.731 + } { // Dummy map test
71.732 + typedef typename _BpGraph::template BlueNodeMap<Dummy>
71.733 + DummyBlueNodeMap;
71.734 + checkConcept<GraphMap<_BpGraph, typename _BpGraph::BlueNode, Dummy>,
71.735 + DummyBlueNodeMap >();
71.736 + }
71.737 + }
71.738 +
71.739 + const _BpGraph& bpgraph;
71.740 + };
71.741 + };
71.742 +
71.743 /// \brief Skeleton class for extendable directed graphs.
71.744 ///
71.745 /// This class describes the interface of extendable directed graphs.
71.746 @@ -1395,6 +1932,65 @@
71.747 };
71.748 };
71.749
71.750 + /// \brief Skeleton class for extendable undirected bipartite graphs.
71.751 + ///
71.752 + /// This class describes the interface of extendable undirected
71.753 + /// bipartite graphs. It extends \ref BaseGraphComponent with
71.754 + /// functions for adding nodes and edges to the graph. This
71.755 + /// concept requires \ref AlterableBpGraphComponent.
71.756 + template <typename BAS = BaseBpGraphComponent>
71.757 + class ExtendableBpGraphComponent : public BAS {
71.758 + public:
71.759 +
71.760 + typedef BAS Base;
71.761 + typedef typename Base::Node Node;
71.762 + typedef typename Base::RedNode RedNode;
71.763 + typedef typename Base::BlueNode BlueNode;
71.764 + typedef typename Base::Edge Edge;
71.765 +
71.766 + /// \brief Add a new red node to the digraph.
71.767 + ///
71.768 + /// This function adds a red new node to the digraph.
71.769 + RedNode addRedNode() {
71.770 + return INVALID;
71.771 + }
71.772 +
71.773 + /// \brief Add a new blue node to the digraph.
71.774 + ///
71.775 + /// This function adds a blue new node to the digraph.
71.776 + BlueNode addBlueNode() {
71.777 + return INVALID;
71.778 + }
71.779 +
71.780 + /// \brief Add a new edge connecting the given two nodes.
71.781 + ///
71.782 + /// This function adds a new edge connecting the given two nodes
71.783 + /// of the graph. The first node has to be a red node, and the
71.784 + /// second one a blue node.
71.785 + Edge addEdge(const RedNode&, const BlueNode&) {
71.786 + return INVALID;
71.787 + }
71.788 + Edge addEdge(const BlueNode&, const RedNode&) {
71.789 + return INVALID;
71.790 + }
71.791 +
71.792 + template <typename _BpGraph>
71.793 + struct Constraints {
71.794 + void constraints() {
71.795 + checkConcept<Base, _BpGraph>();
71.796 + typename _BpGraph::RedNode red_node;
71.797 + typename _BpGraph::BlueNode blue_node;
71.798 + red_node = bpgraph.addRedNode();
71.799 + blue_node = bpgraph.addBlueNode();
71.800 + typename _BpGraph::Edge edge;
71.801 + edge = bpgraph.addEdge(red_node, blue_node);
71.802 + edge = bpgraph.addEdge(blue_node, red_node);
71.803 + }
71.804 +
71.805 + _BpGraph& bpgraph;
71.806 + };
71.807 + };
71.808 +
71.809 /// \brief Skeleton class for erasable directed graphs.
71.810 ///
71.811 /// This class describes the interface of erasable directed graphs.
71.812 @@ -1475,6 +2071,15 @@
71.813 };
71.814 };
71.815
71.816 + /// \brief Skeleton class for erasable undirected graphs.
71.817 + ///
71.818 + /// This class describes the interface of erasable undirected
71.819 + /// bipartite graphs. It extends \ref BaseBpGraphComponent with
71.820 + /// functions for removing nodes and edges from the graph. This
71.821 + /// concept requires \ref AlterableBpGraphComponent.
71.822 + template <typename BAS = BaseBpGraphComponent>
71.823 + class ErasableBpGraphComponent : public ErasableGraphComponent<BAS> {};
71.824 +
71.825 /// \brief Skeleton class for clearable directed graphs.
71.826 ///
71.827 /// This class describes the interface of clearable directed graphs.
71.828 @@ -1511,27 +2116,16 @@
71.829 /// the graph.
71.830 /// This concept requires \ref AlterableGraphComponent.
71.831 template <typename BAS = BaseGraphComponent>
71.832 - class ClearableGraphComponent : public ClearableDigraphComponent<BAS> {
71.833 - public:
71.834 + class ClearableGraphComponent : public ClearableDigraphComponent<BAS> {};
71.835
71.836 - typedef BAS Base;
71.837 -
71.838 - /// \brief Erase all nodes and edges from the graph.
71.839 - ///
71.840 - /// This function erases all nodes and edges from the graph.
71.841 - void clear() {}
71.842 -
71.843 - template <typename _Graph>
71.844 - struct Constraints {
71.845 - void constraints() {
71.846 - checkConcept<Base, _Graph>();
71.847 - graph.clear();
71.848 - }
71.849 -
71.850 - _Graph& graph;
71.851 - Constraints() {}
71.852 - };
71.853 - };
71.854 + /// \brief Skeleton class for clearable undirected biparite graphs.
71.855 + ///
71.856 + /// This class describes the interface of clearable undirected
71.857 + /// bipartite graphs. It extends \ref BaseBpGraphComponent with a
71.858 + /// function for clearing the graph. This concept requires \ref
71.859 + /// AlterableBpGraphComponent.
71.860 + template <typename BAS = BaseBpGraphComponent>
71.861 + class ClearableBpGraphComponent : public ClearableGraphComponent<BAS> {};
71.862
71.863 }
71.864
72.1 --- a/lemon/concepts/heap.h Mon Jul 16 16:21:40 2018 +0200
72.2 +++ b/lemon/concepts/heap.h Wed Oct 17 19:14:07 2018 +0200
72.3 @@ -2,7 +2,7 @@
72.4 *
72.5 * This file is a part of LEMON, a generic C++ optimization library.
72.6 *
72.7 - * Copyright (C) 2003-2010
72.8 + * Copyright (C) 2003-2013
72.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
72.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
72.11 *
72.12 @@ -260,27 +260,27 @@
72.13 Prio prio;
72.14 item=Item();
72.15 prio=Prio();
72.16 - ignore_unused_variable_warning(item);
72.17 - ignore_unused_variable_warning(prio);
72.18 + ::lemon::ignore_unused_variable_warning(item);
72.19 + ::lemon::ignore_unused_variable_warning(prio);
72.20
72.21 OwnItem own_item;
72.22 OwnPrio own_prio;
72.23 OwnState own_state;
72.24 own_item=Item();
72.25 own_prio=Prio();
72.26 - ignore_unused_variable_warning(own_item);
72.27 - ignore_unused_variable_warning(own_prio);
72.28 - ignore_unused_variable_warning(own_state);
72.29 + ::lemon::ignore_unused_variable_warning(own_item);
72.30 + ::lemon::ignore_unused_variable_warning(own_prio);
72.31 + ::lemon::ignore_unused_variable_warning(own_state);
72.32
72.33 _Heap heap1(map);
72.34 _Heap heap2 = heap1;
72.35 - ignore_unused_variable_warning(heap1);
72.36 - ignore_unused_variable_warning(heap2);
72.37 + ::lemon::ignore_unused_variable_warning(heap1);
72.38 + ::lemon::ignore_unused_variable_warning(heap2);
72.39
72.40 int s = heap.size();
72.41 - ignore_unused_variable_warning(s);
72.42 + ::lemon::ignore_unused_variable_warning(s);
72.43 bool e = heap.empty();
72.44 - ignore_unused_variable_warning(e);
72.45 + ::lemon::ignore_unused_variable_warning(e);
72.46
72.47 prio = heap.prio();
72.48 item = heap.top();
73.1 --- a/lemon/concepts/maps.h Mon Jul 16 16:21:40 2018 +0200
73.2 +++ b/lemon/concepts/maps.h Wed Oct 17 19:14:07 2018 +0200
73.3 @@ -2,7 +2,7 @@
73.4 *
73.5 * This file is a part of LEMON, a generic C++ optimization library.
73.6 *
73.7 - * Copyright (C) 2003-2009
73.8 + * Copyright (C) 2003-2013
73.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
73.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
73.11 *
73.12 @@ -60,10 +60,10 @@
73.13 typename _ReadMap::Value own_val = m[own_key];
73.14 own_val = m[own_key];
73.15
73.16 - ignore_unused_variable_warning(key);
73.17 - ignore_unused_variable_warning(val);
73.18 - ignore_unused_variable_warning(own_key);
73.19 - ignore_unused_variable_warning(own_val);
73.20 + ::lemon::ignore_unused_variable_warning(key);
73.21 + ::lemon::ignore_unused_variable_warning(val);
73.22 + ::lemon::ignore_unused_variable_warning(own_key);
73.23 + ::lemon::ignore_unused_variable_warning(own_val);
73.24 }
73.25 const Key& key;
73.26 const typename _ReadMap::Key& own_key;
73.27 @@ -100,10 +100,10 @@
73.28 m.set(key, val);
73.29 m.set(own_key, own_val);
73.30
73.31 - ignore_unused_variable_warning(key);
73.32 - ignore_unused_variable_warning(val);
73.33 - ignore_unused_variable_warning(own_key);
73.34 - ignore_unused_variable_warning(own_val);
73.35 + ::lemon::ignore_unused_variable_warning(key);
73.36 + ::lemon::ignore_unused_variable_warning(val);
73.37 + ::lemon::ignore_unused_variable_warning(own_key);
73.38 + ::lemon::ignore_unused_variable_warning(own_val);
73.39 }
73.40 const Key& key;
73.41 const Value& val;
74.1 --- a/lemon/concepts/path.h Mon Jul 16 16:21:40 2018 +0200
74.2 +++ b/lemon/concepts/path.h Wed Oct 17 19:14:07 2018 +0200
74.3 @@ -2,7 +2,7 @@
74.4 *
74.5 * This file is a part of LEMON, a generic C++ optimization library.
74.6 *
74.7 - * Copyright (C) 2003-2009
74.8 + * Copyright (C) 2003-2013
74.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
74.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
74.11 *
74.12 @@ -75,7 +75,7 @@
74.13 /// \brief Template assigment operator
74.14 template <typename CPath>
74.15 Path& operator=(const CPath& cpath) {
74.16 - ignore_unused_variable_warning(cpath);
74.17 + ::lemon::ignore_unused_variable_warning(cpath);
74.18 return *this;
74.19 }
74.20
74.21 @@ -135,12 +135,12 @@
74.22 e = (i != ii);
74.23 e = (i < ii);
74.24
74.25 - ignore_unused_variable_warning(l);
74.26 - ignore_unused_variable_warning(pp);
74.27 - ignore_unused_variable_warning(e);
74.28 - ignore_unused_variable_warning(id);
74.29 - ignore_unused_variable_warning(ii);
74.30 - ignore_unused_variable_warning(ed);
74.31 + ::lemon::ignore_unused_variable_warning(l);
74.32 + ::lemon::ignore_unused_variable_warning(pp);
74.33 + ::lemon::ignore_unused_variable_warning(e);
74.34 + ::lemon::ignore_unused_variable_warning(id);
74.35 + ::lemon::ignore_unused_variable_warning(ii);
74.36 + ::lemon::ignore_unused_variable_warning(ed);
74.37 }
74.38 };
74.39
74.40 @@ -162,10 +162,10 @@
74.41 e = (i == INVALID);
74.42 e = (i != INVALID);
74.43
74.44 - ignore_unused_variable_warning(l);
74.45 - ignore_unused_variable_warning(e);
74.46 - ignore_unused_variable_warning(id);
74.47 - ignore_unused_variable_warning(ed);
74.48 + ::lemon::ignore_unused_variable_warning(l);
74.49 + ::lemon::ignore_unused_variable_warning(e);
74.50 + ::lemon::ignore_unused_variable_warning(id);
74.51 + ::lemon::ignore_unused_variable_warning(ed);
74.52 }
74.53 _Path& p;
74.54 PathDumperConstraints() {}
74.55 @@ -188,10 +188,10 @@
74.56 e = (i == INVALID);
74.57 e = (i != INVALID);
74.58
74.59 - ignore_unused_variable_warning(l);
74.60 - ignore_unused_variable_warning(e);
74.61 - ignore_unused_variable_warning(id);
74.62 - ignore_unused_variable_warning(ed);
74.63 + ::lemon::ignore_unused_variable_warning(l);
74.64 + ::lemon::ignore_unused_variable_warning(e);
74.65 + ::lemon::ignore_unused_variable_warning(id);
74.66 + ::lemon::ignore_unused_variable_warning(ed);
74.67 }
74.68 _Path& p;
74.69 PathDumperConstraints() {}
75.1 --- a/lemon/config.h.cmake Mon Jul 16 16:21:40 2018 +0200
75.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
75.3 @@ -1,8 +0,0 @@
75.4 -#define LEMON_VERSION "@PROJECT_VERSION@"
75.5 -#cmakedefine LEMON_HAVE_LONG_LONG 1
75.6 -#cmakedefine LEMON_HAVE_LP 1
75.7 -#cmakedefine LEMON_HAVE_MIP 1
75.8 -#cmakedefine LEMON_HAVE_GLPK 1
75.9 -#cmakedefine LEMON_HAVE_CPLEX 1
75.10 -#cmakedefine LEMON_HAVE_CLP 1
75.11 -#cmakedefine LEMON_HAVE_CBC 1
76.1 --- a/lemon/config.h.in Mon Jul 16 16:21:40 2018 +0200
76.2 +++ b/lemon/config.h.in Wed Oct 17 19:14:07 2018 +0200
76.3 @@ -1,26 +1,29 @@
76.4 -/* The version string */
76.5 -#undef LEMON_VERSION
76.6 +#ifndef LEMON_CONFIG_H
76.7 +#define LEMON_CONFIG_H
76.8
76.9 -/* Define to 1 if you have long long */
76.10 -#undef LEMON_HAVE_LONG_LONG
76.11 +#define LEMON_VERSION "@PROJECT_VERSION@"
76.12 +#cmakedefine LEMON_HAVE_LONG_LONG 1
76.13
76.14 -/* Define to 1 if you have any LP solver. */
76.15 -#undef LEMON_HAVE_LP
76.16 +#cmakedefine LEMON_WIN32 1
76.17
76.18 -/* Define to 1 if you have any MIP solver. */
76.19 -#undef LEMON_HAVE_MIP
76.20 +#cmakedefine LEMON_HAVE_LP 1
76.21 +#cmakedefine LEMON_HAVE_MIP 1
76.22 +#cmakedefine LEMON_HAVE_GLPK 1
76.23 +#cmakedefine LEMON_HAVE_CPLEX 1
76.24 +#cmakedefine LEMON_HAVE_SOPLEX 1
76.25 +#cmakedefine LEMON_HAVE_CLP 1
76.26 +#cmakedefine LEMON_HAVE_CBC 1
76.27
76.28 -/* Define to 1 if you have CPLEX. */
76.29 -#undef LEMON_HAVE_CPLEX
76.30 +#define LEMON_CPLEX_ 1
76.31 +#define LEMON_CLP_ 2
76.32 +#define LEMON_GLPK_ 3
76.33 +#define LEMON_SOPLEX_ 4
76.34 +#define LEMON_CBC_ 5
76.35
76.36 -/* Define to 1 if you have GLPK. */
76.37 -#undef LEMON_HAVE_GLPK
76.38 +#cmakedefine LEMON_DEFAULT_LP LEMON_@LEMON_DEFAULT_LP@_
76.39 +#cmakedefine LEMON_DEFAULT_MIP LEMON_@LEMON_DEFAULT_MIP@_
76.40
76.41 -/* Define to 1 if you have SOPLEX */
76.42 -#undef LEMON_HAVE_SOPLEX
76.43 +#cmakedefine LEMON_USE_PTHREAD 1
76.44 +#cmakedefine LEMON_USE_WIN32_THREADS 1
76.45
76.46 -/* Define to 1 if you have CLP */
76.47 -#undef LEMON_HAVE_CLP
76.48 -
76.49 -/* Define to 1 if you have CBC */
76.50 -#undef LEMON_HAVE_CBC
76.51 +#endif
77.1 --- a/lemon/connectivity.h Mon Jul 16 16:21:40 2018 +0200
77.2 +++ b/lemon/connectivity.h Wed Oct 17 19:14:07 2018 +0200
77.3 @@ -2,7 +2,7 @@
77.4 *
77.5 * This file is a part of LEMON, a generic C++ optimization library.
77.6 *
77.7 - * Copyright (C) 2003-2010
77.8 + * Copyright (C) 2003-2013
77.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
77.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
77.11 *
77.12 @@ -745,14 +745,37 @@
77.13 /// \brief Check whether an undirected graph is bi-node-connected.
77.14 ///
77.15 /// This function checks whether the given undirected graph is
77.16 - /// bi-node-connected, i.e. any two edges are on same circle.
77.17 + /// bi-node-connected, i.e. a connected graph without articulation
77.18 + /// node.
77.19 ///
77.20 /// \return \c true if the graph bi-node-connected.
77.21 - /// \note By definition, the empty graph is bi-node-connected.
77.22 + ///
77.23 + /// \note By definition,
77.24 + /// \li a graph consisting of zero or one node is bi-node-connected,
77.25 + /// \li a graph consisting of two isolated nodes
77.26 + /// is \e not bi-node-connected and
77.27 + /// \li a graph consisting of two nodes connected by an edge
77.28 + /// is bi-node-connected.
77.29 ///
77.30 /// \see countBiNodeConnectedComponents(), biNodeConnectedComponents()
77.31 template <typename Graph>
77.32 bool biNodeConnected(const Graph& graph) {
77.33 + bool hasNonIsolated = false, hasIsolated = false;
77.34 + for (typename Graph::NodeIt n(graph); n != INVALID; ++n) {
77.35 + if (typename Graph::OutArcIt(graph, n) == INVALID) {
77.36 + if (hasIsolated || hasNonIsolated) {
77.37 + return false;
77.38 + } else {
77.39 + hasIsolated = true;
77.40 + }
77.41 + } else {
77.42 + if (hasIsolated) {
77.43 + return false;
77.44 + } else {
77.45 + hasNonIsolated = true;
77.46 + }
77.47 + }
77.48 + }
77.49 return countBiNodeConnectedComponents(graph) <= 1;
77.50 }
77.51
78.1 --- a/lemon/core.h Mon Jul 16 16:21:40 2018 +0200
78.2 +++ b/lemon/core.h Wed Oct 17 19:14:07 2018 +0200
78.3 @@ -2,7 +2,7 @@
78.4 *
78.5 * This file is a part of LEMON, a generic C++ optimization library.
78.6 *
78.7 - * Copyright (C) 2003-2010
78.8 + * Copyright (C) 2003-2013
78.9 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
78.10 * (Egervary Research Group on Combinatorial Optimization, EGRES).
78.11 *
78.12 @@ -19,6 +19,29 @@
78.13 #ifndef LEMON_CORE_H
78.14 #define LEMON_CORE_H
78.15
78.16 +///\file
78.17 +///\brief LEMON core utilities.
78.18 +///
78.19 +///This header file contains core utilities for LEMON.
78.20 +///It is automatically included by all graph types, therefore it usually
78.21 +///do not have to be included directly.
78.22 +
78.23 +// Disable the following warnings when compiling with MSVC:
78.24 +// C4250: 'class1' : inherits 'class2::member' via dominance
78.25 +// C4267: conversion from 'size_t' to 'type', possible loss of data
78.26 +// C4355: 'this' : used in base member initializer list
78.27 +// C4503: 'function' : decorated name length exceeded, name was truncated
78.28 +// C4800: 'type' : forcing value to bool 'true' or 'false' (performance warning)
78.29 +// C4996: 'function': was declared deprecated
78.30 +#ifdef _MSC_VER
78.31 +#pragma warning( disable : 4250 4267 4355 4503 4800 4996 )
78.32 +#endif
78.33 +
78.34 +#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)
78.35 +// Needed by the [DI]GRAPH_TYPEDEFS marcos for gcc 4.8
78.36 +#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
78.37 +#endif
78.38 +