private int guess() { for (int i = s; i > 0; i--) { for (int j = 0; j < s; j++) { for (int k = 0; k < s; k++) { if (!grid.cellFilled(j, k) && grid.possible(j, k, i)) { grids.push(grid.clone()); guesses.push(new int[] {j, k, i}); // System.out.println("guessing row: "+j+" col: "+k+" is "+i ); // System.out.println(grids.size() + ""); int r = grid.setCellVal(j, k, i); // System.out.println(grid); if (r == 1) { System.out.println("solved"); return 1; } else if (r == -1) { while (r == -1) { if (grids.isEmpty()) { System.out.println("unsolvable"); return -1; } int[] lastGuess = guesses.pop(); // System.out.println("bad guess, removing // possibility of row: " + lastGuess[0] + " col: " + lastGuess[1] + " being " + // lastGuess[2]); // System.out.println(grid); grid = grids.pop(); // System.out.println(grids.size() + ""); r = grid.setCellNot(lastGuess[0], lastGuess[1], lastGuess[2]); } return r; } else { System.out.println("not enough info"); return 0; } } } } } return -1; }