锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
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);
聽聽聽 }
}