public static SudokuSolutionNode CreateTree(SudokuSolutionNode a_root) { SudokuSolutionNode root = CreateRoot(a_root.Board); root.RecreateTree(a_root); return(root); }
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); } } }