Forum Stats

  • 3,767,917 Users
  • 2,252,729 Discussions
  • 7,874,380 Comments

Discussions

Sudoko grid conversion from 9*9 to all grid size

Gayathri Venugopal
Gayathri Venugopal Member Posts: 108
edited Feb 24, 2019 3:07PM in Java User Groups Discussions

I have coded for Sudoku puzzle in java.The thing is my code has limitation for giving inputs for 9*9 grid.How do I make my code adaptable for all the grids.Please have patience.I am new to java. What changes do I need to make so that the code can run on all grid sizes?The grid is square not a rectangle class Solution {     public void solveSudoku(char[][] board) {         if(solveSudoku2(board)) {             return;         }     }         public boolean solveSudoku2(char[][] board) {         boolean isEmpty = true;         int row = -1;         int col = -1;         int n = board.length;                 //this code is used to check if there exists any empty cell in sudoku board         //if there is any empty cell, that means we are not done yet and we need to solve it further,         // so we cannot return true at any point until all the cells are full         //by empty cell, I mean cells having '.' as the value         for(int i = 0; i < board.length; i++) {             for(int j = 0; j < board[0].length; j++) {               if(board[i][j] == '.') {                   row = i;                   col = j;                   isEmpty = false;                   break;               }             }             if(!isEmpty) {                 break;             }         }                 if(isEmpty) {             return true;         }                 //loop for all the numbers and start placing in the empty cells         //numbers start from 1 to n                 for(int num = 1; num <= n; num++) {             //convert number to char             char char_num = (char)(num + '0');             //check if the number we are adding satisfies all the sudoku rules,             // if it does, then we place that number in the cell             if(checkSafe(board,char_num,row,col)) {                 board[row][col] = (char)(num + '0');                                 //using this number in place row,col, we check for all the other empty places and see if the board is returning true or not                 // if the board is not filled that means that we need to use other number in row,col place.                 //hence backtrack.                 if(solveSudoku2(board)) {                     return true;                 } else {                     board[row][col] = '.';                 }             }         }         return false;     }         public boolean checkSafe(char[][] board, char num, int row, int col) {         //checkk if num is present in the row         for(int i = 0; i< board.length; i++ ) {             if(board[row][i] == num) {                 return false;             }         }                 for(int j = 0; j < board[0].length; j++) {             if(board[j][col] == num) {                 return false;             }         }                 int checknum = (int)Math.sqrt(board.length);         //check for the current grid. grid will be basically checknum*checknum matrix. where every matrix will start from startrow to  startrow + checknum having checknum length.         // so, we we have row = 0, then matrix will start from 0 to 2, i.e. the first 3x3 matrix.         // however, we have row = 2, then also the matrix will start from 0 to 2 - the first 3x3 matrix.         //however, if row = 3, then we will start our matrix from 3 and cotinute upto 5.                 int startrow = row - row % checknum;         int startcol = col - col % checknum;         for(int k = startrow; k < startrow + checknum; k++) {             for(int l = startcol; l < startcol + checknum; l++) {                 if(board[k][l] == num) {                     return false;                 }              }         }         return true;     } }

Tagged:

Answers