/// <summary> /// This will take the current puzzle and solve it /// </summary> /// <remarks> /// This assumes that the puzzle is solvable. Meaning, there was no malicious attempt to lock cell values so that the solver would be in an infinite loop /// </remarks> public static Puzzle Solve(Puzzle puzzle) { Puzzle ret = puzzle.Clone(); // Clear all non-Locked values ret.Clear(); // Call recursive function to do all the work //SolveRecursive(ret); // Call non-recursive function to do all the work SolveNonRecursive(ret); return(ret); }