Merge
authorAlpar Juttner <alpar@cs.elte.hu>
Wed, 17 Oct 2018 19:14:07 +0200
changeset 14023c00344f49c9
parent 1401 cd72eae05bdf
parent 1400 6b79d93e812f
child 1403 e5af35e6c93f
child 1404 c8d0179a32a2
child 1416 f179aa1045a4
Merge
Makefile.am
cmake/FindCPLEX.cmake
configure.ac
demo/Makefile.am
doc/Makefile.am
lemon/Makefile.am
lemon/adaptors.h
lemon/config.h.cmake
lemon/lemon.pc.cmake
m4/lx_check_coin.m4
m4/lx_check_cplex.m4
m4/lx_check_glpk.m4
m4/lx_check_soplex.m4
scripts/Makefile.am
scripts/bib2dox.py
scripts/bootstrap.sh
scripts/chg-len.py
scripts/mk-release.sh
test/Makefile.am
test/preflow_test.cc
tools/Makefile.am
     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&nbsp;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&aacute;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&ouml;tv&ouml;s Lor&aacute;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 +