// // Tucker Balch's A* in pseudo-code // Functions and variables: node.G : the cost of the optimal path from the initial state to node H(X,Y) : heuristic underestimate of the cost from X to Y push(X) : saves node X in a priority queue sorted by cost pop(X) : removes the lowest-cost node from the queue initial : initial state goal : goal state algorithm: for all states i visited[i] = NOT_VISITED; initial.G = 0; initial.cost = initial.G + H(initial,goal); push(initial); pop(current); while (current != goal && current != null) { for each possible action i from current { if (visited[i] != VISITED) { visited[i] = VISITED; i.backpointer = current; // to remember trajectory i.G = current.G + 1; // or sqrt(2) if diagonal i.cost = i.G + H(i,goal); push(i) } } pop(current); } if (current == null) ERROR, no solution if (current == goal) success! find path by following backpointers