Generic synchronous A* search algorithm.
var aStar = require('a-star');
// if this is going to take a while you may want to child_process.fork
// and pass the results to the parent process
// see below for options
var path = aStar(options);
console.log(path);
aStar(options)
Returns an object that looks like this:
{
status: 'success', // one of ['success', 'noPath', 'timeout']
path: [startNode, node1, node2, ..., endNode],
cost: cost, // cost of path
}
If status
is:
success
- a path was found andpath
is an array of nodes including start and end.noPath
- there is no path from start to end.path
is the path to the closest node to end that could be found.timeout
- no path was found in the allotted time.path
is the path to the closest node that could be found in the allotted time.
start
- the start nodeisEnd
- function(node) that returns whether a node is an acceptable endneighbor
- function(node) that returns an array of neighbors for a nodedistance
- function(a, b) that returns the distance cost between two nodesheuristic
- function(node) that returns a heuristic guess of the cost fromnode
to an end.hash
- function(node) that returns a unique string for a node. this is so that we can put nodes in heap and set data structures which are based on plain old JavaScript objects. Defaults to usingnode.toString
.timeout
- optional limit to amount of milliseconds to search before returning null.
The data type for nodes is unrestricted.