CS 100: Lecture L27
May 4
import java.io.*; import java.awt.*; public class CUCSDrawing extends Frame { public void paint(Graphics g) { chess C = eightQ(); showThreats(g,C); } // Yields true if no Queen is threatened public static boolean queensAreSafe(chess C) { for (int i=0;i< 8;i++) for (int j=0;j< 8;j++) if(C.getPiece(i,j).equals("Q") && C.getThreat(i,j)) return false; return true; } // Displays the chessboard showing threatened tiles. public void showThreats(Graphics g, chess C) { int L = 50; int T = 50; int s = 60; String piece; g.setFont(new Font("TimesRoman",Font.PLAIN, 18)); for(int r=0;r<=7;r++) for(int c=0;c<=7;c++) { if(C.getThreat(r,c)) g.setColor(Color.magenta); else g.setColor(Color.white); g.fillRect(L+c*s,T+r*s,s,s); g.setColor(Color.black); g.drawRect(L+c*s,T+r*s,s,s); g.drawString(C.getPiece(r,c),25+L+c*s,35+T+r*s); } } // Yields a chess object that represents a solution to the 8 queens problem. // The idea is to place 8 queens on the board so that none are threatened. public static chess eightQ() { String[][] B = {{"","","","","","","",""}, {"","","","","","","",""}, {"","","","","","","",""}, {"","","","","","","",""}, {"","","","","","","",""}, {"","","","","","","",""}, {"","","","","","","",""}, {"","","","","","","",""}}; chess C = new chess(B); int[] j = new int[8]; int count = 0; for (j[0]=0;j[0]< 8;j[0]++) for (j[1]=0;j[1]< 8;j[1]++) if(j[1]!=j[0]) for (j[2]=0;j[2]< 8;j[2]++) if(j[2]!=j[1] && j[2]!=j[0]) for (j[3]=0;j[3]< 8;j[3]++) if(j[3]!=j[2] && j[3]!=j[1] && j[3]!=j[0]) for (j[4]=0;j[4]< 8;j[4]++) if(j[4]!=j[3] && j[4]!=j[2] && j[4]!=j[1] && j[4]!=j[0]) for (j[5]=0;j[5]< 8;j[5]++) if(j[5]!=j[4] && j[5]!=j[3] && j[5]!=j[2] && j[5]!=j[1] && j[5]!=j[0]) for (j[6]=0;j[6]< 8;j[6]++) if(j[6]!=j[5] && j[6]!=j[4] && j[6]!=j[3] && j[6]!=j[2] && j[6]!=j[1] && j[6]!=j[0]) for (j[7]=0;j[7]< 8;j[7]++) if(j[7]!=j[6] && j[7]!=j[5] && j[7]!=j[4] && j[7]!=j[3] && j[7]!=j[2] && j[7]!=j[1] && j[7]!=j[0]) { // Set up the board. for(int i=0;i< 8;i++) { for(int k=0;k< 8;k++) B[i][k] = ""; B[i][j[i]]="Q"; } C = new chess(B); count++; if(queensAreSafe(C)) { System.out.println(count); return C; } } return C; } } public class Queen { public static void main(String args[]) { CUCSDrawing d = new CUCSDrawing(); d.resize(800,650); d.move(0,75); d.setTitle("Eight Queens"); d.show(); d.toFront(); } }