Scippy

    SCIP

    Solving Constraint Integer Programs

    scip_datastructures.h
    Go to the documentation of this file.
    1/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
    2/* */
    3/* This file is part of the program and library */
    4/* SCIP --- Solving Constraint Integer Programs */
    5/* */
    6/* Copyright (c) 2002-2025 Zuse Institute Berlin (ZIB) */
    7/* */
    8/* Licensed under the Apache License, Version 2.0 (the "License"); */
    9/* you may not use this file except in compliance with the License. */
    10/* You may obtain a copy of the License at */
    11/* */
    12/* http://www.apache.org/licenses/LICENSE-2.0 */
    13/* */
    14/* Unless required by applicable law or agreed to in writing, software */
    15/* distributed under the License is distributed on an "AS IS" BASIS, */
    16/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
    17/* See the License for the specific language governing permissions and */
    18/* limitations under the License. */
    19/* */
    20/* You should have received a copy of the Apache-2.0 license */
    21/* along with SCIP; see the file LICENSE. If not visit scipopt.org. */
    22/* */
    23/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
    24
    25/**@file scip_datastructures.h
    26 * @ingroup PUBLICCOREAPI
    27 * @brief public methods for data structures
    28 * @author Tobias Achterberg
    29 * @author Timo Berthold
    30 * @author Thorsten Koch
    31 * @author Alexander Martin
    32 * @author Marc Pfetsch
    33 * @author Kati Wolter
    34 * @author Gregor Hendel
    35 * @author Leona Gottwald
    36 */
    37
    38/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
    39
    40#ifndef __SCIP_SCIP_DATASTRUCTURES_H__
    41#define __SCIP_SCIP_DATASTRUCTURES_H__
    42
    43
    44#include "scip/def.h"
    45#include "scip/type_misc.h"
    46#include "scip/type_retcode.h"
    47#include "scip/type_scip.h"
    48
    49#ifdef __cplusplus
    50extern "C" {
    51#endif
    52
    53/**@addtogroup PublicDynamicArrayMethods
    54 *
    55 * @{
    56 */
    57
    58/** creates a dynamic array of real values
    59 *
    60 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    61 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    62 */
    63SCIP_EXPORT
    65 SCIP* scip, /**< SCIP data structure */
    66 SCIP_REALARRAY** realarray /**< pointer to store the real array */
    67 );
    68
    69/** frees a dynamic array of real values
    70 *
    71 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    72 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    73 */
    74SCIP_EXPORT
    76 SCIP* scip, /**< SCIP data structure */
    77 SCIP_REALARRAY** realarray /**< pointer to the real array */
    78 );
    79
    80/** extends dynamic array to be able to store indices from minidx to maxidx
    81 *
    82 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    83 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    84 */
    85SCIP_EXPORT
    87 SCIP* scip, /**< SCIP data structure */
    88 SCIP_REALARRAY* realarray, /**< dynamic real array */
    89 int minidx, /**< smallest index to allocate storage for */
    90 int maxidx /**< largest index to allocate storage for */
    91 );
    92
    93/** clears a dynamic real array
    94 *
    95 * @return clears a dynamic real array
    96 */
    97SCIP_EXPORT
    99 SCIP* scip, /**< SCIP data structure */
    100 SCIP_REALARRAY* realarray /**< dynamic real array */
    101 );
    102
    103/** gets value of entry in dynamic array */
    104SCIP_EXPORT
    106 SCIP* scip, /**< SCIP data structure */
    107 SCIP_REALARRAY* realarray, /**< dynamic real array */
    108 int idx /**< array index to get value for */
    109 );
    110
    111/** sets value of entry in dynamic array
    112 *
    113 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    114 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    115 */
    116SCIP_EXPORT
    118 SCIP* scip, /**< SCIP data structure */
    119 SCIP_REALARRAY* realarray, /**< dynamic real array */
    120 int idx, /**< array index to set value for */
    121 SCIP_Real val /**< value to set array index to */
    122 );
    123
    124/** increases value of entry in dynamic array
    125 *
    126 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    127 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    128 */
    129SCIP_EXPORT
    131 SCIP* scip, /**< SCIP data structure */
    132 SCIP_REALARRAY* realarray, /**< dynamic real array */
    133 int idx, /**< array index to increase value for */
    134 SCIP_Real incval /**< value to increase array index */
    135 );
    136
    137/** returns the minimal index of all stored non-zero elements
    138 *
    139 * @return the minimal index of all stored non-zero elements
    140 */
    141SCIP_EXPORT
    143 SCIP* scip, /**< SCIP data structure */
    144 SCIP_REALARRAY* realarray /**< dynamic real array */
    145 );
    146
    147/** returns the maximal index of all stored non-zero elements
    148 *
    149 * @return the maximal index of all stored non-zero elements
    150 */
    151SCIP_EXPORT
    153 SCIP* scip, /**< SCIP data structure */
    154 SCIP_REALARRAY* realarray /**< dynamic real array */
    155 );
    156
    157/** creates a dynamic array of int values
    158 *
    159 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    160 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    161 */
    162SCIP_EXPORT
    164 SCIP* scip, /**< SCIP data structure */
    165 SCIP_INTARRAY** intarray /**< pointer to store the int array */
    166 );
    167
    168/** frees a dynamic array of int values
    169 *
    170 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    171 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    172 */
    173SCIP_EXPORT
    175 SCIP* scip, /**< SCIP data structure */
    176 SCIP_INTARRAY** intarray /**< pointer to the int array */
    177 );
    178
    179/** extends dynamic array to be able to store indices from minidx to maxidx
    180 *
    181 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    182 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    183 */
    184SCIP_EXPORT
    186 SCIP* scip, /**< SCIP data structure */
    187 SCIP_INTARRAY* intarray, /**< dynamic int array */
    188 int minidx, /**< smallest index to allocate storage for */
    189 int maxidx /**< largest index to allocate storage for */
    190 );
    191
    192/** clears a dynamic int array
    193 *
    194 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    195 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    196 */
    197SCIP_EXPORT
    199 SCIP* scip, /**< SCIP data structure */
    200 SCIP_INTARRAY* intarray /**< dynamic int array */
    201 );
    202
    203/** gets value of entry in dynamic array
    204 *
    205 * @return value of entry in dynamic array
    206 */
    207SCIP_EXPORT
    209 SCIP* scip, /**< SCIP data structure */
    210 SCIP_INTARRAY* intarray, /**< dynamic int array */
    211 int idx /**< array index to get value for */
    212 );
    213
    214/** sets value of entry in dynamic array
    215 *
    216 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    217 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    218 */
    219SCIP_EXPORT
    221 SCIP* scip, /**< SCIP data structure */
    222 SCIP_INTARRAY* intarray, /**< dynamic int array */
    223 int idx, /**< array index to set value for */
    224 int val /**< value to set array index to */
    225 );
    226
    227/** increases value of entry in dynamic array
    228 *
    229 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    230 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    231 */
    232SCIP_EXPORT
    234 SCIP* scip, /**< SCIP data structure */
    235 SCIP_INTARRAY* intarray, /**< dynamic int array */
    236 int idx, /**< array index to increase value for */
    237 int incval /**< value to increase array index */
    238 );
    239
    240/** returns the minimal index of all stored non-zero elements
    241 *
    242 * @return the minimal index of all stored non-zero elements
    243 */
    244SCIP_EXPORT
    246 SCIP* scip, /**< SCIP data structure */
    247 SCIP_INTARRAY* intarray /**< dynamic int array */
    248 );
    249
    250/** returns the maximal index of all stored non-zero elements
    251 *
    252 * @return the maximal index of all stored non-zero elements
    253 */
    254SCIP_EXPORT
    256 SCIP* scip, /**< SCIP data structure */
    257 SCIP_INTARRAY* intarray /**< dynamic int array */
    258 );
    259
    260/** creates a dynamic array of bool values
    261 *
    262 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    263 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    264 */
    265SCIP_EXPORT
    267 SCIP* scip, /**< SCIP data structure */
    268 SCIP_BOOLARRAY** boolarray /**< pointer to store the bool array */
    269 );
    270
    271/** frees a dynamic array of bool values
    272 *
    273 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    274 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    275 */
    276SCIP_EXPORT
    278 SCIP* scip, /**< SCIP data structure */
    279 SCIP_BOOLARRAY** boolarray /**< pointer to the bool array */
    280 );
    281
    282/** extends dynamic array to be able to store indices from minidx to maxidx
    283 *
    284 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    285 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    286 */
    287SCIP_EXPORT
    289 SCIP* scip, /**< SCIP data structure */
    290 SCIP_BOOLARRAY* boolarray, /**< dynamic bool array */
    291 int minidx, /**< smallest index to allocate storage for */
    292 int maxidx /**< largest index to allocate storage for */
    293 );
    294
    295/** clears a dynamic bool array
    296 *
    297 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    298 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    299 */
    300SCIP_EXPORT
    302 SCIP* scip, /**< SCIP data structure */
    303 SCIP_BOOLARRAY* boolarray /**< dynamic bool array */
    304 );
    305
    306/** gets value of entry in dynamic array
    307 *
    308 * @return value of entry in dynamic array at position idx
    309 */
    310SCIP_EXPORT
    312 SCIP* scip, /**< SCIP data structure */
    313 SCIP_BOOLARRAY* boolarray, /**< dynamic bool array */
    314 int idx /**< array index to get value for */
    315 );
    316
    317/** sets value of entry in dynamic array
    318 *
    319 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    320 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    321 */
    322SCIP_EXPORT
    324 SCIP* scip, /**< SCIP data structure */
    325 SCIP_BOOLARRAY* boolarray, /**< dynamic bool array */
    326 int idx, /**< array index to set value for */
    327 SCIP_Bool val /**< value to set array index to */
    328 );
    329
    330/** returns the minimal index of all stored non-zero elements
    331 *
    332 * @return the minimal index of all stored non-zero elements
    333 */
    334SCIP_EXPORT
    336 SCIP* scip, /**< SCIP data structure */
    337 SCIP_BOOLARRAY* boolarray /**< dynamic bool array */
    338 );
    339
    340/** returns the maximal index of all stored non-zero elements
    341 *
    342 * @return the maximal index of all stored non-zero elements
    343 */
    344SCIP_EXPORT
    346 SCIP* scip, /**< SCIP data structure */
    347 SCIP_BOOLARRAY* boolarray /**< dynamic bool array */
    348 );
    349
    350/** creates a dynamic array of pointers
    351 *
    352 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    353 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    354 */
    355SCIP_EXPORT
    357 SCIP* scip, /**< SCIP data structure */
    358 SCIP_PTRARRAY** ptrarray /**< pointer to store the int array */
    359 );
    360
    361/** frees a dynamic array of pointers
    362 *
    363 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    364 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    365 */
    366SCIP_EXPORT
    368 SCIP* scip, /**< SCIP data structure */
    369 SCIP_PTRARRAY** ptrarray /**< pointer to the int array */
    370 );
    371
    372/** extends dynamic array to be able to store indices from minidx to maxidx
    373 *
    374 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    375 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    376 */
    377SCIP_EXPORT
    379 SCIP* scip, /**< SCIP data structure */
    380 SCIP_PTRARRAY* ptrarray, /**< dynamic int array */
    381 int minidx, /**< smallest index to allocate storage for */
    382 int maxidx /**< largest index to allocate storage for */
    383 );
    384
    385/** clears a dynamic pointer array
    386 *
    387 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    388 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    389 */
    390SCIP_EXPORT
    392 SCIP* scip, /**< SCIP data structure */
    393 SCIP_PTRARRAY* ptrarray /**< dynamic int array */
    394 );
    395
    396/** gets value of entry in dynamic array */
    397SCIP_EXPORT
    399 SCIP* scip, /**< SCIP data structure */
    400 SCIP_PTRARRAY* ptrarray, /**< dynamic int array */
    401 int idx /**< array index to get value for */
    402 );
    403
    404/** sets value of entry in dynamic array
    405 *
    406 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
    407 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
    408 */
    409SCIP_EXPORT
    411 SCIP* scip, /**< SCIP data structure */
    412 SCIP_PTRARRAY* ptrarray, /**< dynamic int array */
    413 int idx, /**< array index to set value for */
    414 void* val /**< value to set array index to */
    415 );
    416
    417/** returns the minimal index of all stored non-zero elements
    418 *
    419 * @return the minimal index of all stored non-zero elements
    420 */
    421SCIP_EXPORT
    423 SCIP* scip, /**< SCIP data structure */
    424 SCIP_PTRARRAY* ptrarray /**< dynamic ptr array */
    425 );
    426
    427/** returns the maximal index of all stored non-zero elements
    428 *
    429 * @return the maximal index of all stored non-zero elements
    430 */
    431SCIP_EXPORT
    433 SCIP* scip, /**< SCIP data structure */
    434 SCIP_PTRARRAY* ptrarray /**< dynamic ptr array */
    435 );
    436
    437/**@} */
    438
    439/**@addtogroup DisjointSet
    440 *
    441 * @{
    442 */
    443
    444/** creates a disjoint set (union find) structure \p djset for \p ncomponents many components (of size one) */
    445SCIP_EXPORT
    447 SCIP* scip, /**< SCIP data structure */
    448 SCIP_DISJOINTSET** djset, /**< disjoint set (union find) data structure */
    449 int ncomponents /**< number of components */
    450 );
    451
    452/** frees the disjoint set (union find) data structure */
    453SCIP_EXPORT
    455 SCIP* scip, /**< SCIP data structure */
    456 SCIP_DISJOINTSET** djset /**< pointer to disjoint set (union find) data structure */
    457 );
    458
    459/** @} */
    460
    461/**@addtogroup DirectedGraph
    462 *
    463 * @{
    464 */
    465
    466/** creates directed graph structure */
    467SCIP_EXPORT
    469 SCIP* scip, /**< SCIP data structure */
    470 SCIP_DIGRAPH** digraph, /**< pointer to store the created directed graph */
    471 int nnodes /**< number of nodes */
    472 );
    473
    474/**! [SnippetCodeStyleComment] */
    475
    476/** copies directed graph structure
    477 *
    478 * The copying procedure uses the memory of the passed SCIP instance. The user must ensure that the digraph lives
    479 * as most as long as the SCIP instance.
    480 *
    481 * @note The data in nodedata is copied verbatim. This possibly has to be adapted by the user.
    482 */
    483SCIP_EXPORT
    485 SCIP* scip, /**< SCIP data structure */
    486 SCIP_DIGRAPH** targetdigraph, /**< pointer to store the copied directed graph */
    487 SCIP_DIGRAPH* sourcedigraph /**< source directed graph */
    488 );
    489
    490/**! [SnippetCodeStyleComment] */
    491/**@} */
    492
    493#ifdef __cplusplus
    494}
    495#endif
    496
    497#endif
    common defines and data types used in all packages of SCIP
    #define SCIP_Bool
    Definition: def.h:91
    #define SCIP_Real
    Definition: def.h:156
    #define nnodes
    Definition: gastrans.c:74
    SCIP_RETCODE SCIPcopyDigraph(SCIP *scip, SCIP_DIGRAPH **targetdigraph, SCIP_DIGRAPH *sourcedigraph)
    SCIP_RETCODE SCIPcreateDigraph(SCIP *scip, SCIP_DIGRAPH **digraph, int nnodes)
    void SCIPfreeDisjointset(SCIP *scip, SCIP_DISJOINTSET **djset)
    SCIP_RETCODE SCIPcreateDisjointset(SCIP *scip, SCIP_DISJOINTSET **djset, int ncomponents)
    int SCIPgetRealarrayMinIdx(SCIP *scip, SCIP_REALARRAY *realarray)
    int SCIPgetPtrarrayMinIdx(SCIP *scip, SCIP_PTRARRAY *ptrarray)
    SCIP_Bool SCIPgetBoolarrayVal(SCIP *scip, SCIP_BOOLARRAY *boolarray, int idx)
    SCIP_RETCODE SCIPclearPtrarray(SCIP *scip, SCIP_PTRARRAY *ptrarray)
    int SCIPgetIntarrayMaxIdx(SCIP *scip, SCIP_INTARRAY *intarray)
    int SCIPgetIntarrayMinIdx(SCIP *scip, SCIP_INTARRAY *intarray)
    SCIP_RETCODE SCIPcreateRealarray(SCIP *scip, SCIP_REALARRAY **realarray)
    int SCIPgetRealarrayMaxIdx(SCIP *scip, SCIP_REALARRAY *realarray)
    SCIP_RETCODE SCIPextendIntarray(SCIP *scip, SCIP_INTARRAY *intarray, int minidx, int maxidx)
    SCIP_Real SCIPgetRealarrayVal(SCIP *scip, SCIP_REALARRAY *realarray, int idx)
    void * SCIPgetPtrarrayVal(SCIP *scip, SCIP_PTRARRAY *ptrarray, int idx)
    SCIP_RETCODE SCIPincRealarrayVal(SCIP *scip, SCIP_REALARRAY *realarray, int idx, SCIP_Real incval)
    SCIP_RETCODE SCIPfreePtrarray(SCIP *scip, SCIP_PTRARRAY **ptrarray)
    int SCIPgetBoolarrayMinIdx(SCIP *scip, SCIP_BOOLARRAY *boolarray)
    SCIP_RETCODE SCIPextendBoolarray(SCIP *scip, SCIP_BOOLARRAY *boolarray, int minidx, int maxidx)
    SCIP_RETCODE SCIPfreeRealarray(SCIP *scip, SCIP_REALARRAY **realarray)
    int SCIPgetIntarrayVal(SCIP *scip, SCIP_INTARRAY *intarray, int idx)
    SCIP_RETCODE SCIPfreeBoolarray(SCIP *scip, SCIP_BOOLARRAY **boolarray)
    int SCIPgetPtrarrayMaxIdx(SCIP *scip, SCIP_PTRARRAY *ptrarray)
    SCIP_RETCODE SCIPcreateIntarray(SCIP *scip, SCIP_INTARRAY **intarray)
    int SCIPgetBoolarrayMaxIdx(SCIP *scip, SCIP_BOOLARRAY *boolarray)
    SCIP_RETCODE SCIPsetPtrarrayVal(SCIP *scip, SCIP_PTRARRAY *ptrarray, int idx, void *val)
    SCIP_RETCODE SCIPclearIntarray(SCIP *scip, SCIP_INTARRAY *intarray)
    SCIP_RETCODE SCIPincIntarrayVal(SCIP *scip, SCIP_INTARRAY *intarray, int idx, int incval)
    SCIP_RETCODE SCIPcreateBoolarray(SCIP *scip, SCIP_BOOLARRAY **boolarray)
    SCIP_RETCODE SCIPsetBoolarrayVal(SCIP *scip, SCIP_BOOLARRAY *boolarray, int idx, SCIP_Bool val)
    SCIP_RETCODE SCIPextendRealarray(SCIP *scip, SCIP_REALARRAY *realarray, int minidx, int maxidx)
    SCIP_RETCODE SCIPsetRealarrayVal(SCIP *scip, SCIP_REALARRAY *realarray, int idx, SCIP_Real val)
    SCIP_RETCODE SCIPfreeIntarray(SCIP *scip, SCIP_INTARRAY **intarray)
    SCIP_RETCODE SCIPextendPtrarray(SCIP *scip, SCIP_PTRARRAY *ptrarray, int minidx, int maxidx)
    SCIP_RETCODE SCIPclearBoolarray(SCIP *scip, SCIP_BOOLARRAY *boolarray)
    SCIP_RETCODE SCIPcreatePtrarray(SCIP *scip, SCIP_PTRARRAY **ptrarray)
    SCIP_RETCODE SCIPclearRealarray(SCIP *scip, SCIP_REALARRAY *realarray)
    SCIP_RETCODE SCIPsetIntarrayVal(SCIP *scip, SCIP_INTARRAY *intarray, int idx, int val)
    type definitions for miscellaneous datastructures
    type definitions for return codes for SCIP methods
    enum SCIP_Retcode SCIP_RETCODE
    Definition: type_retcode.h:63
    type definitions for SCIP's main datastructure