node package manager
Painless code sharing. npm Orgs help your team discover, share, and reuse code. Create a free org »



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);



Return Value

Returns an object that looks like this:

  status: 'success', // one of ['success', 'noPath', 'timeout'] 
  path: [startNode, node1, node2, ..., endNode],

If status is:

  • success - a path was found and path 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.

options accepted

  • start - the start node
  • isEnd - function(node) that returns whether a node is an acceptable end
  • neighbor - function(node) that returns an array of neighbors for a node
  • distance - function(a, b) that returns the distance cost between two nodes
  • heuristic - function(node) that returns a heuristic guess of the cost from node 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 using node.toString.
  • timeout - optional limit to amount of milliseconds to search before returning null.

The data type for nodes is unrestricted.