From 2196f7cbab996bd0b13fd9935d61d039cfa66176 Mon Sep 17 00:00:00 2001 From: techfreakSahil Date: Fri, 20 Oct 2023 22:50:35 +0530 Subject: [PATCH 1/2] sudoku solver --- Coding/Java/Sudoko.java | 107 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 Coding/Java/Sudoko.java diff --git a/Coding/Java/Sudoko.java b/Coding/Java/Sudoko.java new file mode 100644 index 00000000..1e0ab844 --- /dev/null +++ b/Coding/Java/Sudoko.java @@ -0,0 +1,107 @@ +public class Sudoku { + public static void main(String[] args) { + int[][] board = new int[][]{ + {0, 0, 6, 5, 0, 8, 4, 0, 0}, + {5, 2, 0, 0, 0, 0, 0, 0, 0}, + {0, 8, 7, 0, 0, 0, 0, 3, 1}, + {0, 0, 3, 0, 1, 0, 0, 8, 0}, + {9, 0, 0, 8, 6, 3, 0, 0, 5}, + {0, 5, 0, 0, 9, 0, 6, 0, 0}, + {1, 3, 0, 0, 0, 0, 2, 5, 0}, + {0, 0, 0, 0, 0, 0, 0, 7, 4}, + {0, 0, 5, 2, 0, 6, 3, 0, 0} + }; + + if (solve(board)) { + display(board); + } else { + System.out.println("Cannot solve"); + } + + } + + static boolean solve(int[][] board) { + int n = board.length; + int row = -1; + int col = -1; + + boolean emptyLeft = true; + + // this is how we are replacing the r,c from arguments + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + if (board[i][j] == 0) { + row = i; + col = j; + emptyLeft = false; + break; + } + } + // if you found some empty element in row, then break + if (emptyLeft == false) { + break; + } + } + + if (emptyLeft == true) { + return true; + // soduko is solved + } + + // backtrack + for (int number = 1; number <= 9; number++) { + if (isSafe(board, row, col, number)) { + board[row][col] = number; + if (solve(board)) { + // found the answer + return true; + } else { + // backtrack + board[row][col] = 0; + } + } + } + return false; + } + + private static void display(int[][] board) { + for(int[] row : board) { + for(int num : row) { + System.out.print(num + " "); + } + System.out.println(); + } + } + + + static boolean isSafe(int[][] board, int row, int col, int num) { + // check the row + for (int i = 0; i < board.length; i++) { + // check if the number is in the row + if (board[row][i] == num) { + return false; + } + } + + // check the col + for (int[] nums : board) { + // check if the number is in the col + if (nums[col] == num) { + return false; + } + } + + int sqrt = (int)(Math.sqrt(board.length)); + int rowStart = row - row % sqrt; + int colStart = col - col % sqrt; + + for (int r = rowStart; r < rowStart + sqrt; r++) { + for (int c = colStart; c < colStart + sqrt; c++) { + if (board[r][c] == num) { + return false; + } + } + } + return true; + } +} From 5a01b186f153549d3edb706e267b852659370966 Mon Sep 17 00:00:00 2001 From: techfreakSahil Date: Fri, 20 Oct 2023 22:55:41 +0530 Subject: [PATCH 2/2] maze solver --- Coding/Java/Maze.java | 67 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 Coding/Java/Maze.java diff --git a/Coding/Java/Maze.java b/Coding/Java/Maze.java new file mode 100644 index 00000000..ab29bb6c --- /dev/null +++ b/Coding/Java/Maze.java @@ -0,0 +1,67 @@ +import java.util.Scanner; + +public class Maze { + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + System.out.println("Enter the value of n: "); + int n = sc.nextInt(); + boolean[][] board = new boolean[n][n]; + System.out.println(nQueens(board,0)); + } + static int nQueens(boolean[][] board, int row){ + if(row==board.length){ + display(board); + System.out.println(); + return 1; + } + int count = 0; + for(int col =0;col