Skip to content

Instantly share code, notes, and snippets.

@TitusRobyK
Created February 3, 2022 09:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save TitusRobyK/66e8116f73e4754c4cc7df7ce25917d4 to your computer and use it in GitHub Desktop.
Save TitusRobyK/66e8116f73e4754c4cc7df7ce25917d4 to your computer and use it in GitHub Desktop.
Sudoku Solver
public class SudokuSolver {
private static final int GRID_SIZE = 9;
private static final int BOX_SIZE = 3;
public static void main(String[] args) {
int[][] board = {
{ 7, 0, 2, 0, 5, 0, 6, 0, 0 },
{ 0, 0, 0, 0, 0, 3, 0, 0, 0 },
{ 1, 0, 0, 0, 0, 9, 5, 0, 0 },
{ 8, 0, 0, 0, 0, 0, 0, 9, 0 },
{ 0, 4, 3, 0, 0, 0, 7, 5, 0 },
{ 0, 9, 0, 0, 0, 0, 0, 0, 8 },
{ 0, 0, 9, 7, 0, 0, 0, 0, 5 },
{ 0, 0, 0, 2, 0, 0, 0, 0, 0 },
{ 0, 0, 7, 0, 4, 0, 2, 0, 3 }
};
System.out.println("\nInput ..\n");
printBoard(board);
if (solveBoard(board)) {
System.out.println("\nSolved !!\n");
printBoard(board);
} else {
System.out.println("\nUnsolvable !!");
}
}
private static void printBoard(int[][] board) {
for (int row = 0; row < GRID_SIZE; row++) {
if (row % 3 == 0 && row != 0) {
System.out.println("------------");
}
for (int column = 0; column < GRID_SIZE; column++) {
if (column % 3 == 0 && column != 0) {
System.out.print("|");
}
System.out.print(board[row][column]);
}
System.out.println();
}
}
private static boolean isNumberInRow(int[][] board, int number, int row) {
for (int i = 0; i < GRID_SIZE; i++) {
if (board[row][i] == number) {
return true;
}
}
return false;
}
private static boolean isNumberInColumn(int[][] board, int number, int column) {
for (int i = 0; i < GRID_SIZE; i++) {
if (board[i][column] == number) {
return true;
}
}
return false;
}
private static boolean isNumberInBox(int[][] board, int number, int row, int column) {
int initialBoxRow = row - row % BOX_SIZE;
int initialBoxColumn = column - column % BOX_SIZE;
for (int i = initialBoxRow; i < initialBoxRow + BOX_SIZE; i++) {
for (int j = initialBoxColumn; j < initialBoxColumn + BOX_SIZE; j++) {
if (board[i][j] == number) {
return true;
}
}
}
return false;
}
private static boolean isValidPlacement(int[][] board, int number, int row, int column) {
return !isNumberInRow(board, number, row) && !isNumberInColumn(board, number, column)
&& !isNumberInBox(board, number, row, column);
}
private static boolean solveBoard(int[][] board) {
for (int row = 0; row < GRID_SIZE; row++) {
for (int column = 0; column < GRID_SIZE; column++) {
if (board[row][column] == 0) {
for (int numberToTry = 1; numberToTry <= GRID_SIZE; numberToTry++) {
if (isValidPlacement(board, numberToTry, row, column)) {
board[row][column] = numberToTry;
if (solveBoard(board)) {
return true;
} else {
board[row][column] = 0;
}
}
}
return false;
}
}
}
return true;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment