Ejemplo n.º 1
0
            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);
                    }
                }
            }
Ejemplo n.º 2
0
            public void FillDescendantSolutionEnumerator(ISolutionEnumerator descendantSolutionEnumerator)
            {
                KnightSolutionEnumerator enumerator = (KnightSolutionEnumerator)descendantSolutionEnumerator;

                enumerator.NextKnight    = 0;
                enumerator.KnightsNumber = KnightsNumber;
            }
Ejemplo n.º 3
0
            public IList FindSolutions(ISolutionEnumerator enumerator)
            {
                ArrayList result = new ArrayList();

                SolutionEnumerators.Add(enumerator);
                Solutions.Add(enumerator.StartingPartialSolution.Clone());

                FindSolutionsRecursive(result, 0, enumerator);

                return(result);
            }