private void FindSolutionsRecursive(ArrayList result, int level, ISolutionEnumerator enumerator) { ISolution solution = GetSolution(level); Debug.Assert(solution != enumerator.StartingPartialSolution); while (enumerator.FillDescendantSolution(solution)) { //Console.Write(solution.ToString()); //Console.ReadLine(); if (solution.IsComplete) { //Console.Write(solution.ToString()); //Console.ReadLine(); result.Add(solution.Clone()); } else { ISolutionEnumerator descendantEnumerator = GetSolutionEnumerator(level + 1); solution.FillDescendantSolutionEnumerator(descendantEnumerator); descendantEnumerator.StartingPartialSolution = solution; FindSolutionsRecursive(result, level + 1, descendantEnumerator); } } }