⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eightqueen.java

📁 java 实现的八皇后问题
💻 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 + -