/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //This program is to implement n-queens problem using backtracking ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// import java.io.*; import java.util.*; class Backtrack { public int x[]; public int count; public Backtrack(int MAX) { x=new int[MAX]; } /* This function is for printing the solution to n-queens problem */ public void print_board(int n) { int i; System.out.println("\n\nSolution :"+(++count));//number of solution for(i=1; i<=n; i++) { System.out.print(" "+i); } for(i=1; i<=n; i++) { System.out.print("\n\n"+i); for(int j=1; j<=n; j++) // for nXn board { if(x[i]==j) System.out.print(" Q");//Queen at i,j position else System.out.print(" -");// empty slot } } System.out.print("\n Press any key to continue..."); } /* This function is for checking for the conflicts. If there is no conflict for the desired position it returns 1 otherwise it returns 0 */ public boolean place(int row,int column) { int i; for(i=1; i<=row-1; i++) { //checking for column and diagonal conflicts if(x[i] == column) return false; else if(Math.abs(x[i] - column) == Math.abs(i - row)) return false; } //no conflicts hence Queen can be placed return true; } /* By this function we try the next free slot and check for proper positioning of queen */ public void Queen(int row,int n) { int column; for(column=1; column<=n; column++) { if(place(row,column)) { x[row] = column; if(row==n) print_board(n);//printing the board configuration else //try next queen with next position Queen(row+1,n); } } } } class BacktrackDemo { public static void main (String[] args )throws IOException,NullPointerException { int n; Backtrack obj=new Backtrack(20); System.out.println("\n\t Program for n-Queens Using Backtracking"); System.out.println("\nEnter Number of Queens"); n=getInt(); obj.Queen(1,n);//trace using backtrack } //////////////////////////////////////////////////////////////////////////////////////////////////////// //Following functions are used to handle the inputs entered //by the user using keyboard /////////////////////////////////////////////////////////////////////////////////////////////////////// public static String getString() throws IOException { InputStreamReader input = new InputStreamReader(System.in); BufferedReader b = new BufferedReader(input); String str = b.readLine();//reading the string from console return str; } public static char getChar() throws IOException { String str = getString(); return str.charAt(0);//reading first char of console string } public static int getInt() throws IOException { String str = getString(); return Integer.parseInt(str);//converting console string to numeric value } } Output D:\DAA_MU>javac Backtrack.java D:\DAA_MU>java BacktrackDemo Program for n-Queens Using Backtracking Enter Number of Queens 4 Solution :1 1 2 3 4 1 - Q - - 2 - - - Q 3 Q - - - 4 - - Q - Press any key to continue... Solution :2 1 2 3 4 1 - - Q - 2 Q - - - 3 - - - Q 4 - Q - - Press any key to continue... D:\DAA_MU>