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); } } }
public void FillDescendantSolutionEnumerator(ISolutionEnumerator descendantSolutionEnumerator) { KnightSolutionEnumerator enumerator = (KnightSolutionEnumerator)descendantSolutionEnumerator; enumerator.NextKnight = 0; enumerator.KnightsNumber = KnightsNumber; }
public IList FindSolutions(ISolutionEnumerator enumerator) { ArrayList result = new ArrayList(); SolutionEnumerators.Add(enumerator); Solutions.Add(enumerator.StartingPartialSolution.Clone()); FindSolutionsRecursive(result, 0, enumerator); return(result); }