Scippy

SCIP

Solving Constraint Integer Programs

dijkstra.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-2024 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 dijkstra.h
26 * @brief Definitions for Disjkstra's shortest path algorithm
27 * @author Thorsten Koch
28 * @author Marc Pfetsch
29 */
30
31#ifndef DIJSKSTRA_H
32#define DIJSKSTRA_H
33
34#ifdef __cplusplus
35extern "C" {
36#endif
37
38/* declare own bools, if necessary */
39#ifndef DIJKSTRA_Bool
40#define DIJKSTRA_Bool unsigned int /**< type used for boolean values */
41#endif
42#ifndef TRUE
43#define TRUE 1 /**< boolean value TRUE */
44#define FALSE 0 /**< boolean value FALSE */
45#endif
46
47#define DIJKSTRA_FARAWAY 0xffffffffu /**< node has distance 'infinity' */
48#define DIJKSTRA_UNUSED 0xffffffffu /**< node is unused */
49
50
51/** graph structure - use consecutive storage for arcs */
53{
54 unsigned int nodes; /**< number of nodes */
55 unsigned int* outbeg; /**< indices of out-arcs for each node in arcs array */
56 unsigned int* outcnt; /**< number of out-arcs for each node */
57 unsigned int arcs; /**< consecutive storage for all arcs */
58 unsigned int* weight; /**< corresponding weights for all arcs */
59 unsigned int* head; /**< target nodes for all arcs */
60 unsigned int minweight; /**< total minimal weight */
61 unsigned int maxweight; /**< total maximal weight */
62};
63
64/** graph structure - use consecutive storage for arcs */
66
67
68
69/** Check whether the data structures of the graph are valid. */
71 const DIJKSTRA_GRAPH* G /**< directed graph to be checked */
72 );
73
74/** Dijkstra's algorithm using binary heaps */
75unsigned int dijkstra(
76 const DIJKSTRA_GRAPH* G, /**< directed graph */
77 unsigned int source, /**< source node */
78 unsigned long long* dist, /**< node distances (allocated by user) */
79 unsigned int* pred, /**< node predecessors in final shortest path tree (allocated by user) */
80 unsigned int* entry, /**< temporary storage (for each node - must be allocated by user) */
81 unsigned int* order /**< temporary storage (for each node - must be allocated by user) */
82 );
83
84/** Dijkstra's algorithm for shortest paths between a pair of nodes using binary heaps */
85unsigned int dijkstraPair(
86 const DIJKSTRA_GRAPH* G, /**< directed graph */
87 unsigned int source, /**< source node */
88 unsigned int target, /**< target node */
89 unsigned long long* dist, /**< node distances (allocated by user) */
90 unsigned int* pred, /**< node predecessors in final shortest path tree (allocated by user) */
91 unsigned int* entry, /**< temporary storage (for each node - must be allocated by user) */
92 unsigned int* order /**< temporary storage (for each node - must be allocated by user) */
93 );
94
95/** Dijkstra's algorithm for shortest paths between a pair of nodes using binary heaps and truncated at cutoff */
96unsigned int dijkstraPairCutoff(
97 const DIJKSTRA_GRAPH* G, /**< directed graph */
98 unsigned int source, /**< source node */
99 unsigned int target, /**< target node */
100 unsigned long long cutoff, /**< if the distance of a node reached this value, we truncate the search */
101 unsigned long long* dist, /**< node distances (allocated by user) */
102 unsigned int* pred, /**< node predecessors in final shortest path tree (allocated by user) */
103 unsigned int* entry, /**< temporary storage (for each node - must be allocated by user) */
104 unsigned int* order /**< temporary storage (for each node - must be allocated by user) */
105 );
106
107/** Dijkstra's algorithm for shortest paths between a pair of nodes ignoring nodes, using binary heaps, and truncated at cutoff */
108unsigned int dijkstraPairCutoffIgnore(
109 const DIJKSTRA_GRAPH* G, /**< directed graph */
110 unsigned int source, /**< source node */
111 unsigned int target, /**< target node */
112 unsigned int* ignore, /**< marking nodes to be ignored (if value is nonzero) */
113 unsigned long long cutoff, /**< if the distance of a node reached this value, we truncate the search */
114 unsigned long long* dist, /**< node distances (allocated by user) */
115 unsigned int* pred, /**< node predecessors in final shortest path tree (allocated by user) */
116 unsigned int* entry, /**< temporary storage (for each node - must be allocated by user) */
117 unsigned int* order /**< temporary storage (for each node - must be allocated by user) */
118 );
119
120#ifdef __cplusplus
121}
122#endif
123
124#endif
unsigned int dijkstra(const DIJKSTRA_GRAPH *G, unsigned int source, unsigned long long *dist, unsigned int *pred, unsigned int *entry, unsigned int *order)
Definition: dijkstra.c:190
unsigned int dijkstraPair(const DIJKSTRA_GRAPH *G, unsigned int source, unsigned int target, unsigned long long *dist, unsigned int *pred, unsigned int *entry, unsigned int *order)
Definition: dijkstra.c:290
unsigned int dijkstraPairCutoffIgnore(const DIJKSTRA_GRAPH *G, unsigned int source, unsigned int target, unsigned int *ignore, unsigned long long cutoff, unsigned long long *dist, unsigned int *pred, unsigned int *entry, unsigned int *order)
Definition: dijkstra.c:507
DIJKSTRA_Bool dijkstraGraphIsValid(const DIJKSTRA_GRAPH *G)
Definition: dijkstra.c:42
#define DIJKSTRA_Bool
Definition: dijkstra.h:40
unsigned int dijkstraPairCutoff(const DIJKSTRA_GRAPH *G, unsigned int source, unsigned int target, unsigned long long cutoff, unsigned long long *dist, unsigned int *pred, unsigned int *entry, unsigned int *order)
Definition: dijkstra.c:396
unsigned int arcs
Definition: dijkstra.h:57
unsigned int minweight
Definition: dijkstra.h:60
unsigned int * head
Definition: dijkstra.h:59
unsigned int * outbeg
Definition: dijkstra.h:55
unsigned int nodes
Definition: dijkstra.h:54
unsigned int * weight
Definition: dijkstra.h:58
unsigned int * outcnt
Definition: dijkstra.h:56
unsigned int maxweight
Definition: dijkstra.h:61