private void Guess() { //find a square with two possible values Console.WriteLine("Guessing!"); Square[] temp; Board branch; List<Square[]> permutations = new List<Square[]>(); for (int i = 0; i < n4; i++) { if (allSquares[i].getValue() != Square.NULL_VALUE) { foreach (int values in allSquares[i].GetPossibleValuesList()) { temp = new Square[n4]; Array.Copy(allSquares, temp, n4); temp[i].setValue(i); permutations.Add(temp); } } } foreach (Square[] sArr in permutations) { branch = new Board(n, sArr); branch.completePuzzle(); if (branch.isLegal() && branch.isComplete()) { allSquares = branch.allSquares; Console.WriteLine(showSquares() + "\n\n!!!!!!!"); Console.ReadLine(); } } }