computer science

profilekylecs14
JAVACODE.docx

import static java.lang.System.*;

class Queens {

   static void findQueens(int num, String[] args) {       int counter = 0;       int j,k;       int [] A = new int[num+1];       for(int i = 0; i< num+1; ++i) {          A[i] = i;       }       if(checkOptionV(args[0])) {          for( j=0; j<doFactorial(num); j++) {             nextPermutation(A);             if(isSolution(A)) {                counter++;                System.out.print("(");                for( k=1; k<A.length-1; k++) {                   System.out.print(A[k]+", ");                }                if(k == A.length-1) {                   System.out.print(A[k]);                }                System.out.println(")");             }          }       }       else {          for( j=0; j<doFactorial(num); j++) {             nextPermutation(A);             if(isSolution(A)) {                counter++;             }          }          System.out.println(num+"-Queens has "+counter+" solutions.");       }    }

   static void nextPermutation(int[] A){       int i, j, k, pivot=0, successor=0;       boolean pivotFound = false;       for(i=A.length-2; i>0; i--) {          if(A[i]<A[i+1]) {             pivot = i;             pivotFound = true;             break;          }       }       if(pivotFound == false) {          reverse(A, 1, A.length-1);          return;       }       for(k=A.length-1; k>0; k--) {          if(A[k]>A[i]) {             successor = k;             break;          }       }       swap(A, pivot, successor);       reverse(A, pivot+1, A.length-1);       return;    }

   static boolean isSolution(int[] A){       int i, j;       int n = A.length;       for(i=1; i<=n-1; i++) {          for(j=i+1; j<=n-1; j++) {             if(j-i==Math.abs(A[i]-A[j])) {                return false;             }          }       }       return true;    }

   static void swap(int[]A, int i, int j) {       int temp;       temp = A[i];       A[i] = A[j];       A[j] = temp;    }

   static void reverse(int[]A, int i, int j) {       while(i<j){          swap(A,i,j);          i++;          j--;       }    }

   static int doFactorial(int num) {       int ans;       if(num < 0) {          out.println("number must be non-negative integer");          printUsage();       }       if(num == 0 || num == 1) return ans = 1;       ans = num * doFactorial(num-1);       return ans;    }

   static boolean checkOptionV(String args) {       if(args.equals("-v")) return true;       else return false;    }

   static int parseArgs(String[] args) {       int num = 0;       if(args.length == 1) {          try { num = Integer.parseInt(args[0]); }          catch (NumberFormatException e) { printUsage(); }       }       else if (args.length == 2) {          if(checkOptionV(args[0])) {             try { num = Integer.parseInt(args[1]); }             catch (NumberFormatException e) { printUsage(); }          }          else printUsage();       }       return num;    }

   static void printUsage() {       out.println("Usage: java Queens [-v] number");       out.println("Option: -v verbose output, print all solutions");       exit(1);    }

   public static void main(String[] args) {       if (args.length > 2) printUsage();       int num = parseArgs(args);       findQueens(num,args);    }

}