|
Defines |
#define | constraintValue(i, j) (dbm_raw2bound(dbm[(i) * dim + (j)])) |
#define | b(i) (-rates[i]) |
#define | index(n) ((n) - nodes) |
#define | pred(i) index(nodes[i].pred) |
#define | depth(i) nodes[i].depth |
#define | thread(i) index(nodes[i].thread) |
#define | inbound(i) nodes[i].inbound |
#define | flow(i) nodes[i].flow |
#define | potential(i) nodes[i].potential |
Functions |
static void | printSimpleNodeInfo (Node *nodes, uint32_t i) |
static void | printNodeInfo (Node *nodes, const int32_t *rates, uint32_t i) |
static void | printAllNodeInfo (Node *nodes, const int32_t *rates, uint32_t dim) |
static void | printSimpleAllNodeInfo (Node *nodes, uint32_t dim) |
static bool | checkTreeIntegrity (const raw_t *dbm, const int32_t *rates, Node *nodes, uint32_t dim) |
static bool | nodeHasNoChildren (Node *node) |
static void | printSolution (int32_t *valuation, const int32_t *rates, uint32_t dim) |
static void | printClockLowerBounds (const raw_t *dbm, uint32_t dim) |
static void | printAllConstraints (const raw_t *dbm, uint32_t dim, arc_t *arcs, uint32_t nbConstraints) |
static void | printAllRates (const int32_t *rates, uint32_t dim) |
static void | findInitialSpanningTreeSolution (const raw_t *dbm, uint32_t dim, const int32_t *rates, Node *nodes) |
static void | updatePotentials (Node *leave, int32_t change) |
static Node * | findLastNodeBefore (Node *node, Node *exclude) |
| Returns the last node according to preorder before exclude but not before node.
|
static Node * | findLastNodeBefore (Node *node, uint32_t depth) |
| Starting from node, returns the first node according to preorder for which the preorder successor has a depth not higher than depth.
|
static Node * | findNthPredecessor (Node *node, int32_t n) |
| Returns the n'th predecessor of node.
|
static bool | isPredecessorOf (Node *n, Node *m) |
| Returns true if and only if n is on the path to the root from m.
|
static void | updateNonRootSubtree (Node *rootNode, Node *nonRootNode, Node *leave, bool sourceInRootSubtree, uint32_t flow) |
| Update all node information in the subtree not containing the root.
|
static void | updateFlowInCycle (Node *k, Node *l, Node *root, uint32_t flowToAugment) |
static void | updateSpanningTree (Node *k, Node *l, Node *leave, Node *root, int32_t costEnter) |
| Update the spanning tree so the node information is updated including flow and node potentials.
|
static arc_t * | enteringArcDanzig (arc_t *firstArc, arc_t *lastArc, Node *nodes, const raw_t *dbm, uint32_t dim) |
| Danzig's entering rule chooses the eligible arc with the lowest cost.
|
static Node * | discoverCycleRoot (Node *k, Node *l) |
| Returns the common ancestor of nodes k and l with the biggest depth.
|
static Node * | findLeavingArc (Node *k, Node *l, Node *root) |
static void | testAndRemoveArtificialArcs (const raw_t *dbm, const int32_t *rates, Node *nodes, uint32_t dim) |
static bool | allPositive (const int32_t *first, const int32_t *last) |
| Returns true if and only if all elements in [first, last) are non-negative.
|
static void | infimumNetSimplex (const raw_t *dbm, uint32_t dim, const int32_t *rates, Node *nodes) |
int32_t | pdbm_infimum (const raw_t *dbm, uint32_t dim, uint32_t offsetCost, const int32_t *rates) |
void | pdbm_infimum (const raw_t *dbm, uint32_t dim, uint32_t offsetCost, const int32_t *rates, int32_t *valuation) |