我的八皇后

          Posted on 2006-11-28 05:05 近似凱珊卓 閱讀(318) 評論(0)  編輯  收藏 所屬分類: 我的作業

          八皇后問題,都知道吧。循環套遞歸,比漢諾塔還寒,暈歸暈,索性弄出來了,撒花~~~


          public class Das_n_Damen_Problem extends ChessMiniJava{
          ??? static int n;
          ??? static boolean flag;
          ?static boolean[][] Platzierung;
          ?static boolean[] a;
          ?static boolean[] b;
          ?static boolean[] c;
          ?
          ?public static void main(String[] args){
          ??write("Wie viele Damen?");
          ??n=read();
          ???? flag=false;
          ??Platzierung=new boolean[n][n];
          ??a=new boolean[n];
          ??b=new boolean[2*n];
          ??c=new boolean[2*n];
          ??re(0);
          ?}
          ?
          ?public static void re(int i){
          ??if(flag)
          ???return;
          ??for(int iSpalte=0;iSpalte<n;iSpalte++){
          ???if(a[iSpalte]==false && b[i-iSpalte+n]==false && c[i+iSpalte]==false){
          ????Platzierung[i][iSpalte]=true;
          ????a[iSpalte]=true;
          ????b[i-iSpalte+n]=true;
          ????c[i+iSpalte]=true;
          ????if(i==n-1){
          ?????paintField(Platzierung);
          ?????flag=true;
          ?????return;
          ????}
          ????else{
          ?????re(i+1);
          ????}
          ???Platzierung[i][iSpalte]=false;
          ???a[iSpalte]=false;
          ???b[i-iSpalte+n]=false;
          ???c[i+iSpalte]=false;
          ???}
          ??}
          ?}
          }


          附上ChessMiniJava源代碼:
          import java.awt.GridLayout;
          import javax.swing.JPanel;
          import javax.swing.JFrame;

          import java.awt.Color;
          import java.awt.Font;
          import java.awt.Point;
          import java.awt.Graphics;
          import java.awt.Graphics2D;
          import java.awt.GradientPaint;
          import java.awt.RenderingHints;

          public class ChessMiniJava extends MiniJava{
          ??? private static class Field extends JPanel {
          ??????? boolean black,queen; Point p;
          ??????? public Field(boolean black,boolean queen){
          ??????????? this.black=black;
          ??????????? this.queen=queen;
          ??????????? p = getLocation();
          ??????? }
          ?public void paint(Graphics g) {
          ??super.paint(g);
          ??if (black) g.setColor(Color.BLACK);
          ??????????????? else g.setColor(Color.WHITE);
          ??????????????? g.fillRect(p.getLocation().x,p.getLocation().y,getWidth()*2,getHeight());
          ??????????????? g.setColor(Color.RED);

          ??????????????? GradientPaint gradient = new GradientPaint(0, 0, Color.YELLOW, getWidth(), 0, Color.RED);
          ??????????????? ((Graphics2D)g).setPaint(gradient);
          ??????????????? ((Graphics2D)g).setRenderingHint(RenderingHints.KEY_ANTIALIASING,
          ??????????????????????? RenderingHints.VALUE_ANTIALIAS_ON);
          ??????????????? if (queen) {
          ??????????????????? g.fillOval((int)(getWidth()*.1),(int)(getHeight()*.7),(int)(getWidth()*.8),(int)(getHeight()*.2));
          ??????????????????? int[] x = {(int)(getWidth()*.1), (int)(getWidth()*.9), (int)(getWidth()*.9), (int)(getWidth()*.7), (int)(getWidth()*.5), (int)(getWidth()*.3), (int)(getWidth()*.1)};
          ??????????????????? int[] y = {(int)(getHeight()*.8),(int)(getHeight()*.8),(int)(getHeight()*.2),(int)(getHeight()*.6),(int)(getHeight()*.2),(int)(getHeight()*.6),(int)(getHeight()*.2)};
          ??????????????????? g.fillPolygon(x,y,7);
          ??????????????? }
          ?}
          ??? }
          ??? public static void paintField(boolean[][] field){
          ??????? JFrame myFrame = new JFrame("Spielfeld");
          ??????? JPanel pan = new JPanel();
          ??????? java.util.Set<Integer> s1 = new java.util.HashSet<Integer>(),s2=new java.util.HashSet<Integer>(),s3 = new java.util.HashSet<Integer>(),s4=new java.util.HashSet<Integer>();
          ??????? pan.setLayout(new GridLayout(field.length,field.length));
          ??????? for (int x = 0 ; x < field.length; x ++){
          ??????????? for (int y = 0; y < field[x].length; y++){
          ??????????????? pan.add(new Field((x+y)%2 ==1,field[x][y]));
          ??????????????? if (field[x][y]) { s1.add(x);s2.add(y);s3.add(x+y);s4.add(field.length-1-y+x);};
          ??????????? }
          ??????? }
          ??????? boolean sol=(s1.size()==field.length)&&(field.length==s2.size())&&(field.length==s3.size())&&(field.length==s4.size());
          ??????? if (System.getProperty("SOL","nowshow").equals("show")){
          ??????????? if (sol) pan.setBorder(javax.swing.BorderFactory.createLineBorder(Color.GREEN,5));
          ??????????? else pan.setBorder(javax.swing.BorderFactory.createLineBorder(Color.RED,5));
          ??????? }
          ??????? myFrame.add(pan);
          ??????? myFrame.setSize(400,400);
          ??????? myFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
          ??????? myFrame.setVisible(true);
          ??? }
          }


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          posts - 9, comments - 0, trackbacks - 0, articles - 0

          Copyright © 近似凱珊卓

          主站蜘蛛池模板: 楚雄市| 孝义市| 收藏| 丰都县| 扶风县| 大宁县| 通化县| 卢龙县| 呼和浩特市| 洛扎县| 古田县| 突泉县| 山阳县| 登封市| 东乌珠穆沁旗| 滦南县| 会东县| 大宁县| 犍为县| 多伦县| 团风县| 康马县| 方山县| 弋阳县| 合阳县| 曲阳县| 莆田市| 宁远县| 彩票| 通州区| 循化| 石狮市| 定远县| 全椒县| 垫江县| 桐柏县| 阳朔县| 台安县| 永登县| 安徽省| 绍兴市|