[ library(graph_algorithms) | Reference Manual | Alphabetic Index ]
# possible_path(+DistanceArg, +SourceNode, +SinkNode, +Tolerance, +Lengths, +Predecessors, -Path)

Computes an actual path from a predecessors array
*DistanceArg*
- which argument of EdgeData to use as distance (integer)
*SourceNode*
- source node number
*SinkNode*
- sink node number
*Tolerance*
- tolerable deviation from minimal length (non-negative number)
*Lengths*
- array of numbers
*Predecessors*
- array of edge lists
*Path*
- Length-EdgeList structure

## Description

This predicate complements the all_short_paths_as_edges/6 predicate.
The intended usage is that all_short_paths_as_edges/6 is used to
precompute shortest path information from a single source node
to all possible sink nodes, and possible_path/7 uses this
information to enumerate actual paths to a specific sink node.
If paths from one source to several sinks are needed, it is more
efficient to use one call to all_short_paths_as_edges/6 and several
calls to possible_path/7, than to use several calls to
single_pair_all_short_paths/7.

Note that the Lengths and Predecessors arrays must have been computed
with the same settings for DistanceArg, SourceNode and Tolerance that are
given to possible_path/7, otherwise errors or missing paths will occur.

### Modes and Determinism

- possible_path(+, +, +, +, +, +, -) is nondet

### Fail Conditions

There is no path to SinkNode
## Examples

single_pair_shortest_path(Graph, Source, Sink, Path) :-
all_short_paths_as_edges(Graph, 0, Source, 0, Lengths, Preds),
possible_path(0, Source, Sink, 0, Lengths, Preds, Path).

## See Also

all_short_paths_as_edges / 6