Ejemplo n.º 1
0
        public static SudokuSolutionNode CreateTree(SudokuSolutionNode a_root)
        {
            SudokuSolutionNode root = CreateRoot(a_root.Board);

            root.RecreateTree(a_root);

            return(root);
        }
Ejemplo n.º 2
0
        private void RecreateTree(SudokuSolutionNode a_node)
        {
            if (a_node.State == SudokuSolutionNodeState.Solution)
            {
                Step();
                if (a_node.Nodes.Any())
                {
                    Nodes.First().RecreateTree(a_node.Nodes.First());
                }
            }
            else if ((a_node.State == SudokuSolutionNodeState.Solved) ||
                     (a_node.State == SudokuSolutionNodeState.Unsolvable) ||
                     (a_node.State == SudokuSolutionNodeState.Unsolved))
            {
            }
            else if (a_node.State == SudokuSolutionNodeState.State)
            {
                if (a_node.StepMode == SudokuSolutionNodeStepMode.StepAllAlgorithms)
                {
                    StepAll();
                }
                else if (a_node.StepMode == SudokuSolutionNodeStepMode.StepFirstSolution)
                {
                    Step();
                }
                else if (a_node.StepMode == SudokuSolutionNodeStepMode.StepSelectedAlgorithm)
                {
                    Step(a_node.Nodes.First().Solution.Type);
                }
                else if (a_node.StepMode == SudokuSolutionNodeStepMode.StepNone)
                {
                    return;
                }

                SudokuSolutionNode sol1 = a_node.Nodes.FirstOrDefault(n => n.Nodes.Any());

                SudokuSolutionNode sol2 = null;
                if (sol1 != null)
                {
                    sol2 = Nodes.FirstOrDefault(n => n.Solution.Equals(sol1.Solution));
                }

                if ((sol1 != null) && (sol2 != null))
                {
                    sol2.RecreateTree(sol1);
                }
            }
        }