Please Help,😫 where am I going wrong? Sudoku Solver
Anonymous User
88

LINK TO PROBLEM

class Solution {

        boolean flag;

        public void solveSudoku(char[][] board) {

                flag = false;                   // flag = true denotes that a sudoku is solved.
                logic(board, 0, 0);
                for (char val[]: board)
                                System.out.println(Arrays.toString(val));
                        
        }

        public void logic(char board[][], int cr, int cc) { // cr denotes current row, cc denotes current column

                 if (flag)              // if sudoku is solved then no need for futher recursion, and altering contents of the board
                        return;

                if (cr >= 9) {
                        flag = true; // flag = true will indicate that a solution was found, and since unique solution is guranteed, therefore board[][] is a valid solved sudoku rightnow.
                        return;
                }

                int ni = 0; // ni denotes new i that is new value of row for next recursive call
                int nj = 0; // nj denotes new j that is new value of column for next recursive call

                if (cc == 8) {
                        ni = cr + 1;
                        nj = 0;
                } else {
                        ni = cr;
                        nj = cc + 1;
                }

                if (board[cr][cc] != '.') {

                        logic(board, ni, nj);

                } else if (board[cr][cc] == '.')
                        for (char val = '1'; val <= '9'; ++val) {

                                if (isSafe(board, cr, cc, val)) {

                                        // for (char arr[]: board)
                                        //         System.out.println(Arrays.toString(arr));
                                        // System.out.println();

                                        board[cr][cc] = val;

                                        logic(board, ni, nj);

                                        board[cr][cc] = '.';
                                }
                        }

        }

        public boolean isSafe(char board[][], int row, int col, char val) {

                int i = row;
                int j = col;

                for (j = 0; j < 9; ++j)
                        if (board[row][j] == val)
                                return false;

                i = row;
                j = col;

                for (i = 0; i < 9; ++i)
                        if (board[i][col] == val)
                                return false;

                int corner_i = row / 3 * 3;
                int corner_j = col / 3 * 3;

                for (i = 0; i < 3; ++i)
                        for (j = 0; j < 3; ++j)
                                if (board[corner_i + i][corner_j + j] == val)
                                        return false;

                /*
                // region 9

                if (row > 5) {

                        if (col > 5)
                                for (i = 6; i < 9; ++i)
                                        for (j = 6; j < 9; ++j)
                                                if (board[i][j] == val)
                                                        return false;

                        // region 8

                        if (col > 2)
                                for (i = 3; i < 5; ++i)
                                        for (j = 3; j < 5; ++j)
                                                if (board[i][j] == val)
                                                        return false;

                        // region 7

                        for (i = 0; i < 3; ++i)
                                for (j = 0; j < 3; ++j)
                                        if (board[i][j] == val)
                                                return false;

                }

                // region 6
                else if (row > 2) {

                        if (col > 5)
                                for (i = 3; i < 6; ++i)
                                        for (j = 6; j < 9; ++j)
                                                if (board[i][j] == val)
                                                        return false;

                        // region 5

                        if (col > 2)
                                for (i = 3; i < 6; ++i)
                                        for (j = 3; j < 6; ++j)
                                                if (board[i][j] == val)
                                                        return false;

                        // region 4       
                        for (i = 3; i < 6; ++i)
                                for (j = 0; j < 3; ++j)
                                        if (board[i][j] == val)
                                                return false;

                }

                // region 3
                else {

                        if (col > 5)
                                for (i = 0; i < 3; ++i)
                                        for (j = 6; j < 9; ++j)
                                                if (board[i][j] == val)
                                                        return false;

                        // region 2

                        if (col > 2)
                                for (i = 0; i < 3; ++i)
                                        for (j = 3; j < 6; ++j)
                                                if (board[i][j] == val)
                                                        return false;

                        // region 1

                        for (i = 0; i < 3; ++i)
                                for (j = 0; j < 3; ++j)
                                        if (board[i][j] == val)
                                                return false;

                }
                
                */

                return true;
        }
}
Comments (2)