computer science

profilekylecs14
Queens.java

//Queens.java //Bryant Lin //bmlin //pa5 //This program will find all solutions to the Queens problem for 1<=n<=13. class Queens { public static void main(String[] args) { int counter; int number; int queensLength; //boolean isInt=(isInteger(args[1])); if (args.length > 0) //out of bounds otherwise { if (args[0].equals("-v")) //The program will operate in two modes: normal and verbose, indicated by the command line option "-v" { if (isInteger(args[1]) == true) { queensLength = Integer.parseInt(args[1]); counter = 0; int[] queens = new int[queensLength+1]; number = queensLength; //for (int i = queensLength-1; i >= 0; i--) for (int i=queensLength-1;i>0;i--) { number*=i; } int[][] nextArray = new int[number][queensLength+1]; for (int i=1;i<=queensLength;i++) { queens[i] = i; } if (isSolution(queens) == true) { for (int i=1;i<=queensLength;i++) { nextArray[counter][i] = queens[i]; } counter++; } for (int i=number;i>0;i--) { nextPermutation(queens); if (isSolution(queens) == true) { for (int in=1;in<=queensLength;in++) { nextArray[counter][in] = queens[in]; } counter++; } } if (counter!=0) { for (int i=0;i<counter;i++) { printArrayLine(nextArray,i); } System.out.println(queensLength+"-Queens has "+ counter + " solutions"); } else { System.out.println(queensLength + "-Queens has no solutions"); } } else { defaultText(); } } else if (isInteger(args[0]) == true) { queensLength = Integer.parseInt(args[0]); int[] queens = new int[queensLength+1]; number = queensLength; for (int i=queensLength-1;i>0;i--) { number = number*i; } counter = 0; for (int i=1; i<=queensLength;i++) { queens[i] = i; } if (isSolution(queens) == true) { counter++; } for (int i=number; i>0;i--) { nextPermutation(queens); if (isSolution(queens) == true) { counter++; } } if (counter != 0) { System.out.println(queensLength + "-Queens has " + counter + " solutions"); } else { System.out.println(queensLength + "-Queens has no solutions."); } } else { defaultText(); } } else { defaultText(); } } static void printArrayLine(int[][] A, int line) { System.out.print("("); for (int i=1; i<=A[line].length-1;i++) { System.out.print(A[line][i]); if (i < A[line].length-1) { System.out.print(", "); } else { System.out.println(")"); } } } static void nextPermutation(int[] A) { int one = A[A.length-1]; int pivot = 0; int next = 0; int two = 0; int three = 0; int piv = A.length-1; int nextPos = A.length-1; for (int i=A.length-1;i>=1;i--) { if (A[i] < one) { pivot = A[i]; piv = i; break; } else { one = A[i]; } } if (pivot == 0) { two = 1; three = A.length-1; while (two < three) { swap(A,two,three); two++; three--; } return; } for (int i=A.length-1;i>=1;i--) { if (A[i] > pivot) { next = A[i]; nextPos = i; break; } } swap(A,piv,nextPos); if (piv != A.length-1) { two = piv+1; three = A.length-1; while (two < three) { swap(A,two,three); two++; three--; } } return; } static void swap(int[] array, int first, int second) { int temp; temp= array[first]; array[first] = array[second]; array[second] = temp; } static boolean isSolution(int[] A) { int x,y; boolean isCorrect = true; for (int i=1;i<=A.length-1;i++) { for (int j=1;j<=A.length-1;j++) { // if (j==i) // { // continue; // } // // else if (j!=i) // { // x=Math.abs(i-j); // y=Math.abs(A[i]-A[j]); // if (x==y) // { // isCorrect=false; // } // } if (j!=i) { x = Math.abs(i - j); y = Math.abs(A[i] - A[j]); if (x == y) { isCorrect = false; } } } } if (isCorrect == true) { return(true); } else { return(false); } } // public static boolean isInteger (String s, int def) { // try { // return Integer.parseInt(s); // } // catch (NumberFormatException e) { // // return def; // } // } doesn't work public static boolean isInteger(String s) { try { Integer.parseInt(s); } catch(NumberFormatException e) { return false; } return true; } static void defaultText() { System.out.println("Usage: Queens [-v] number"); System.out.println("Option: -v verbose output, print all solutions"); //break; } }