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

📄 queen.java

📁 用java实现几个算法和应用程序,有一定的参考价值
💻 JAVA
字号:
import java.awt.*;

public class Queen {
    private int n;
    private int[] x;
    private int sum;
    private QueenFrame frame;
    private static final int QUEEN_START_X = 50;
    private static final int QUEEN_START_Y = 50;
    private static final int QUEEN_SIZE = 200;
  //  private QueenFrame.PaintThread paintThread = null;

    public Queen(int n, int[] x, int sum,QueenFrame frame) {
	this.n = n;
	this.x = x;
	this.sum = sum;
	this.frame = frame;
//	this.paintThread = paintThread;
    }

    public int getSum() {
	return sum;
    }

    // 皇后位置恰当返回true,否则返回false
    public boolean place(int k, Graphics g) {
	for (int i = 1; i<k; i++)
	    if ((Math.abs(k-i)==Math.abs(x[i]-x[k]))||x[i]==x[k]) {
		frame.paintThread.pause();
		//下面两行代码:如果不满足的话,让其成为背景色,也可以注释掉,即不画出来
		//g.setColor(Color.GREEN);
		//g.fillOval(QUEEN_START_X+QUEEN_SIZE/n*x[k], QUEEN_START_Y+QUEEN_SIZE/n*k, QUEEN_SIZE/n, QUEEN_SIZE/n);
		return false;// 位于同一条斜线上或同一列
	    }
	return true;
    }

    public void drawBackTrace(Graphics g) {
	x[1] = 0;
	int k = 1;// 第k个皇后
	Color c = g.getColor();
	while (k>0) {
	    x[k] += 1;// 第k个皇后放在x[k]列上
	    if (x[k]<=n) {	
		
		frame.paintThread.pause();
		g.setColor(Color.RED);
		g.fillOval(QUEEN_START_X+QUEEN_SIZE/n*x[k], QUEEN_START_Y+QUEEN_SIZE/n*k, QUEEN_SIZE/n, QUEEN_SIZE/n);
		//frame.repaint();
	    }
	    while ((x[k]<=n)&&!place(k, g)) {
		// 不满足条件		
		frame.paintThread.pause();	
		g.setColor(Color.GREEN);
		g.fillOval(QUEEN_START_X+QUEEN_SIZE/n*x[k], QUEEN_START_Y+QUEEN_SIZE/n*k, QUEEN_SIZE/n, QUEEN_SIZE/n);
		//frame.repaint();
		x[k] += 1;
		if (x[k]<=n) {
		    frame.paintThread.pause();		
		    g.setColor(Color.RED);
		    g.fillOval(QUEEN_START_X+QUEEN_SIZE/n*x[k], QUEEN_START_Y+QUEEN_SIZE/n*k, QUEEN_SIZE/n, QUEEN_SIZE/n);
		}
	    }
	    if (x[k]<=n) {
		if (k==n) {
		    sum++;
		    frame.textUp.setText("找到第"+String.valueOf(this.sum)+"种结果!");
		    try {
			QueenFrame.PaintThread.sleep(3000);
		    } catch (InterruptedException e) {
			e.printStackTrace();
		    }
		    frame.paintThread.pause();
		    g.setColor(Color.GREEN);
		    g.fillOval( QUEEN_START_X+QUEEN_SIZE/n*x[k], QUEEN_START_Y+QUEEN_SIZE/n*k, QUEEN_SIZE/n, QUEEN_SIZE/n );
		    //frame.repaint();


		} else {
		    k++;
		    x[k] = 0;
		}
	    } else {
		k--;
		frame.paintThread.pause();
		g.setColor(Color.GREEN);
		g.fillOval( QUEEN_START_X+QUEEN_SIZE/n*x[k], QUEEN_START_Y+QUEEN_SIZE/n*k, QUEEN_SIZE/n, QUEEN_SIZE/n );
		//frame.repaint();

	    }
	}
	g.setColor(c);
	frame.textUp.setText("查找结束共找到"+String.valueOf(this.sum)+"种结果!");
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -