46 unsigned int count = 0;
70 if ( count > G->
arcs )
84 const unsigned int* entry,
85 const unsigned long long* value,
86 const unsigned int* order,
87 const unsigned int used,
88 const unsigned int size
93 if ( entry ==
NULL || value ==
NULL || order ==
NULL || used > size )
97 for (
i = 0;
i < used / 2; ++
i)
99 unsigned int child =
i +
i + 1;
100 if ( value[entry[
i]] > value[entry[child]] )
102 if ( child + 1 < used && value[entry[
i]] > value[entry[child + 1]] )
115 const unsigned long long* value,
121 unsigned long long val;
126 child = current + current + 1;
127 ent = entry[current];
130 while ( child < used )
134 if ( child + 1 < used )
136 if ( value[entry[child + 1]] < value[e] )
142 if ( value[e] >= val )
151 entry[current] = ent;
152 order[ent] = current;
160 const unsigned long long* value,
165 unsigned long long val;
170 ent = entry[current];
173 while ( current > 0 )
175 parent = (current - 1) / 2;
178 if ( value[e] <= val )
185 entry[current] = ent;
186 order[ent] = current;
194 unsigned long long* dist,
200 unsigned long long weight;
201 unsigned int iters = 0;
202 unsigned int used = 0;
209 assert( source < G->nodes );
239 entry[0] = entry[used];
252 weight = G->
weight[e] + dist[tail];
255 if ( dist[head] > weight )
258 assert( used < G->nodes );
259 assert( head <= G->nodes );
266 assert( head < G->nodes );
295 unsigned long long* dist,
301 unsigned long long weight;
302 unsigned int iters = 0;
303 unsigned int used = 0;
310 assert( source < G->nodes );
311 assert( target < G->nodes );
340 if ( tail == target )
345 entry[0] = entry[used];
358 weight = G->
weight[e] + dist[tail];
361 if ( dist[head] > weight )
364 assert( used < G->nodes );
365 assert( head <= G->nodes );
372 assert( head < G->nodes );
401 unsigned long long cutoff,
402 unsigned long long* dist,
408 unsigned long long weight;
409 unsigned int iters = 0;
410 unsigned int used = 0;
417 assert( source < G->nodes );
418 assert( target < G->nodes );
447 if ( tail == target )
452 entry[0] = entry[used];
462 if ( dist[tail] >=
cutoff )
469 weight = G->
weight[e] + dist[tail];
472 if ( dist[head] > weight )
475 assert( used < G->nodes );
476 assert( head <= G->nodes );
483 assert( head < G->nodes );
512 unsigned int* ignore,
513 unsigned long long cutoff,
514 unsigned long long* dist,
520 unsigned long long weight;
521 unsigned int iters = 0;
522 unsigned int used = 0;
529 assert( source < G->nodes );
530 assert( target < G->nodes );
533 assert( ignore[source] == 0 );
534 assert( ignore[target] == 0 );
561 if ( tail == target )
566 entry[0] = entry[used];
576 if ( dist[tail] >=
cutoff )
585 if ( ignore[head] != 0 )
588 weight = G->
weight[e] + dist[tail];
591 if ( dist[head] > weight )
594 assert( used < G->nodes );
595 assert( head <= G->nodes );
602 assert( head < G->nodes );
static DIJKSTRA_Bool dijkstraHeapIsValid(const unsigned int *entry, const unsigned long long *value, const unsigned int *order, const unsigned int used, const unsigned int size)
unsigned int dijkstra(const DIJKSTRA_GRAPH *G, unsigned int source, unsigned long long *dist, unsigned int *pred, unsigned int *entry, unsigned int *order)
static void dijkstraSiftUp(unsigned int *entry, const unsigned long long *value, unsigned int *order, unsigned int current)
static void dijkstraSiftDown(unsigned int *entry, const unsigned long long *value, unsigned int *order, unsigned int used, unsigned int current)
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)
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)
DIJKSTRA_Bool dijkstraGraphIsValid(const DIJKSTRA_GRAPH *G)
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)
Definitions for Disjkstra's shortest path algorithm.
struct DIJKSTRA_Graph DIJKSTRA_GRAPH
assert(minobj< SCIPgetCutoffbound(scip))