Basically, you do a breadth-first full recursive solve, but bail out of any branch that is clearly worse than other candidates.