📄 eightqueen.java
字号:
/*
* EightQueen.java
*
* Created on 2007年6月16日, 下午3:00
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package Experimetation3;
/**
*
* @author ZhengJun
*/
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.lang.*;
import java.awt.image.*;
import java.net.URL;
public class EightQueen extends Applet implements ActionListener{
public static final int WIDTH = 800;
public static final int HEIGHT = 700;
public String N,N2;
public int n,count;
public static int temp;
public Image [] images;
public Image queenImage,backImage;
public int [][] A;
public int [] x;
private Button a,c;
private TextField b,d;
boolean choosea, chooseb,choosec;
public void init() {
A=new int[1001][11];
images=new Image[2];
n=0;count=0;temp=0;
setSize(WIDTH,HEIGHT);
a = new Button("确定");
b = new TextField(3);
c = new Button("察看结果");
d = new TextField(3);
add(b);add(a);add(c);add(d);
a.addActionListener(this);
b.addActionListener(this);
c.addActionListener(this);
d.addActionListener(this);
c.setEnabled(false);
}
public void actionPerformed(ActionEvent ae) {
String str = ae.getActionCommand();
double a = 4.0/n;
MediaTracker tracker=new MediaTracker(this);
for(int i=0;i<images.length;i++)
{
URL imgURL=getDocumentBase();
String ima="images"+i+".jpg";
images[i]=getImage(imgURL,ima);
tracker.addImage(images[i],i);
}
try{
tracker.waitForID(0);
}catch(InterruptedException e){}
if (str.equals("确定"))
{
backImage=images[1].getScaledInstance((int)(images[1].getWidth(this)*a),
(int)(images[1].getHeight(this)*a),Image.SCALE_DEFAULT);
N=b.getText();
n= new Integer(Integer.parseInt(N)) ;
x=new int[n+1];
choosea = true;
choosec = false;
chooseb = false;
c.setEnabled(true);
repaint();
}
if (str.equals("察看结果"))
{
N2=d.getText();
temp=Integer.parseInt(N2);
queenImage=images[0].getScaledInstance((int)(images[0].getWidth(this)*a),
(int)(images[0].getHeight(this)*a),Image.SCALE_DEFAULT);
choosec=true;
chooseb=false;
repaint();
}
}
public int queen(int num){
int k,number=0;
x[1]=0;
k=1;
while(k>0)
{
x[k]=x[k]+1;
while(x[k]<=num&&place(k)==false)
{
x[k]=x[k]+1;
}
if(x[k]<=num)
{
if(k==num)
{
for(int i=1;i<=num;i++)
{
A[number+1][i]=x[i];
}
number++;
}
else
{
k=k+1;
x[k]=0;
}
}
else
k=k-1;
}
count=number;
return(number);
}
public boolean place(int k){
int i = 1;
while(i<k)
{
if(x[i]==x[k]||Math.abs(x[i]-x[k])==Math.abs(i-k))
return false;
i++;
}
return true;
}
public void paint(Graphics g) { //绘图
g.drawLine(100, 50, 700, 50);
g.drawLine(100, 50, 100, 650);
g.drawLine(100, 650, 700, 650);
g.drawLine(700, 650, 700, 50);
g.drawString("请输入皇后数(4-10):",180,20);
for(int j=n-1;j>0;j--)
{
g.drawLine(100+j*600/n, 50, 100+j*600/n, 650);
g.drawLine(100,50+j*600/n, 700, 50+j*600/n);
}
if (choosea)
{
for(int i=1;i<=n;i++)
{
if(i%2==0)
{
for(int j=1;j<n;j++)
{
g.drawImage(backImage,102+(j)*600/n,52+(i-1)*600/n,this);
j++;
}
}
else
for(int j=1;j<=n;j++)
{
g.drawImage(backImage,102+(j-1)*600/n,52+(i-1)*600/n,this);
j++;
}
}
queen(n);
g.drawString("共有"+queen(n)+"个解",600,20);
}
if (choosec)
{
for(int j=1;j<=n;j++)
{
int curr=A[Integer.parseInt(N2)][j];
g.drawImage(queenImage,102+(curr-1)*600/n,52+(j-1)*600/n,this);
}
}
if (chooseb)
{
temp++;
for(int j=1;j<=n;j++)
{
int curr=A[temp][j];
g.drawImage(queenImage,102+(curr-1)*600/n,52+(j-1)*600/n,this);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -