Program details: the program starts with phase1 allowing for succesively
1, 2 etc. until a maximal number of moves. As soon as phase1 hits a
solution phase2 is called, again with a maximum number of moves starting
I don't remember from the earlier description; are the searches being done
depth-first or breadth-first? If breadth-first, then there is no reason to
put an upper limit on the number of moves for finding a phase1 solution,
since the algorithm HAS to solve phase1 in order to find an overall solution.
Once you have an overall solution, of course, the length of phase1+phase2
solution can be used as an upper bound on subsequent phase1 solutions.
Also, do you reduce the "maximum number of moves" for phase2 based on
solutions already found? For instance, once you have found a combined
phase1+phase2 solution in 20 moves, then if you find an alternative phase1
solution in 14 moves there is no reason to look deeper than 5 moves in
phase2 (or 6 if you want to find all solutions that tie for minimum length).