Backtracking Sudoku

I've tried to use the backtrack code but it doesn't work well.

public boolean checa(int lin, int col, int numero) {

        //checa linha
        for (int i = 0; i < 9; i++) {  

            if(botoes[lin][i].getText().equals(String.valueOf(numero))) {

                return false;
            }
        }

        //checa coluna
        for (int j = 0; j < 9; j++) {

            if (botoes[j][col].getText().equals(String.valueOf(numero))) {

                return false;
            }
        }

        //checa grade
        int linhaCaixa = lin - (lin % 3);
        int colunaCaixa = col - (col % 3);

        for (int x = 0; x < 3; x++) {

            for (int y = 0; y < 3; y++) {

                if (botoes[linhaCaixa + x][colunaCaixa + y].getText().equals(String.valueOf(numero))) {

                    return false;
                }
            }
        }

        return true;
    }

public boolean resolveBT(int zeros) { 

        if(zeros == 0) { return true; }

        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                if (botoes[i][j].getText().equals(vazio)) {
                    for(int n = 1; n <= 9; n++) {

                        if(checa(i, j, n)) {

                            botoes[i][j].setText(String.valueOf(n));
                            botoes[i][j].setForeground(Color.red);
                            botoes[i][j].setEditavel(false);
                            zeros--;

                            if(resolveBT(zeros))
                                return true;
                            else
                                botoes[i][j].setText(vazio);

                            
                        }
                    }
                }
            }
        }

        return false;
    }

This is my code, the BT and the isValid methods, can you help me?

Author: IghorSantiago
Login to Answer
Sort By:
Oldest
|
Newest
|
Vote
|
My Answer