public void AddChildren(MatrixNode node) { string opposite; if (node.Moves.Count > 0) { opposite = Movable.CalcOposite(node.Moves.Last()); } else { opposite = ""; } for (int i = 0; i < 4; i++) { for (int j = 0; j < 3; j++) { Movable aux = MovesFactory.GetInstance(i, j); if (aux.IsValid(node.Matrix)) { if (!opposite.Equals(aux.GetString())) { string[,] movedMatrix = aux.Move(node.Matrix); MatrixNode child = new MatrixNode(movedMatrix, FinishMatrix); child.Sucesors.AddRange(node.Sucesors); child.Sucesors.Add(child); child.Moves.AddRange(node.Moves); child.Moves.Add(aux); child.calculateEvaluationFunction(); AddInOrder(child); } } } } }