// Generally returns a bit (only a bit) more intelligent looking routes than
// the basic version. Not a true distance image (which would increase CPU
// load) level of intelligence though.
// List of Visited Nodes
FastNodeList visited = new FastNodeList(550);
// List of Nodes to Visit
LinkedList<Node> to_visit = new LinkedList<Node>();
to_visit.add(start);
short targetx = end.getLoc().getNodeX();
short targety = end.getLoc().getNodeY();
int dx, dy;
boolean added;
int i = 0;
while (i < 550)
{
Node node;
try
{
node = to_visit.removeFirst();
}
catch (Exception e)
{
// No Path found
return null;
}
if (node.equals(end)) //path found!
return constructPath(node);
i++;
visited.add(node);
node.attacheNeighbors();
Node[] neighbors = node.getNeighbors();
if (neighbors == null) continue;
for (Node n : neighbors)
{
if (!visited.containsRev(n) && !to_visit.contains(n))
{
added = false;
n.setParent(node);
dx = targetx - n.getLoc().getNodeX();
dy = targety - n.getLoc().getNodeY();