diff --git a/Backtracking/NQueen.java b/Backtracking/NQueen.java new file mode 100644 index 0000000..a36e4e5 --- /dev/null +++ b/Backtracking/NQueen.java @@ -0,0 +1,98 @@ +package Java_DSA.Backtracking; +import java.util.*; + +public class NQueen +{ + public static void saveBoard(char[][] board,List> allBoards){ + String row = ""; + List newBoard = new ArrayList<>(); + for (int i = 0;i < board.length;i++){ + row = ""; + for(int j = 0;j < board.length;j++){ + if(board[i][j] == 'Q') + row = row + 'Q'; + else + row = row + '.'; + } + newBoard.add(row); + } + allBoards.add(newBoard); + } + public static boolean isSafe(int row,int col,char[][] board){ + //checking horizontally + for(int j = 0;j < board.length;j++){ + if(board[row][j] == 'Q'){ + return false; + } + } + + //checking verically + for(int i = 0;i < board.length;i++){ + if(board[i][col] == 'Q'){ + return false; + } + } + + //checking upper left + int r = row; + for(int c = col;c >= 0 && r >= 0 ;c--,r--){ + if(board[r][c] == 'Q'){ + return false; + } + } + + //checking upper right + r = row; + for(int c = col;c < board.length && r >= 0 ;c++,r--){ + if(board[r][c] == 'Q'){ + return false; + } + } + + //checking lower left + r = row; + for(int c = col;c >= 0 && r < board.length ;c--,r++){ + if(board[r][c] == 'Q'){ + return false; + } + } + + //checking lower right + r = row; + for(int c = col;c < board.length && r < board.length ;c++,r++){ + if(board[r][c] == 'Q'){ + return false; + } + } + + return true; + } + public static void helper(char[][] board,List> allBoards,int col){ + if(col == board.length){ + saveBoard(board,allBoards); + return; + } + for(int row = 0;row < board.length;row++){ + if(isSafe(row,col,board)){ + board[row][col] = 'Q'; + helper(board,allBoards,col+1); + board[row][col] = '.'; + } + } + } + public static List>calcNQueen(int n){ + List>allBoards = new ArrayList<>(); + char[][] board = new char[n][n]; + helper(board,allBoards,0); + + return allBoards; + } + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + List> result = new ArrayList<>(); + System.out.println("Enter the degree of the chess : "); + int n = sc.nextInt(); + result = calcNQueen(n); + System.out.println(result); + } +} diff --git a/Backtracking/StringPermutation.java b/Backtracking/StringPermutation.java new file mode 100644 index 0000000..5cf4cbb --- /dev/null +++ b/Backtracking/StringPermutation.java @@ -0,0 +1,19 @@ +package Java_DSA.Backtracking; + +public class StringPermutation { + public static void calcPermutation(String str,String perm,int index){ + if(str.length() == 0){ + System.out.println(perm); + return; + } + for(int i = 0;i < str.length();i++){ + char currChar = str.charAt(i); + String newStr = str.substring(0,i) + str.substring(i+1); + calcPermutation(newStr,perm + currChar,index+1); + } + } + public static void main(String[] args) { + String str = "ABC"; + calcPermutation(str,"",0); + } +}