implements the famous A* search algorithm to solve a combinatorial problem, and to substantially speed it up with an efficient priority queue implementation.
Works correctly for arbitrary N-by-N boards (for any 2 ≤ N < 128), but may be too slow to solve some of them in a reasonable amount of time.