当前位置:文档之家› 八皇后问题算法分析

八皇后问题算法分析

流程图
八皇后问题算法分析
在这个问题中首先定义的是一个用于构造界面的二位数组a【i】【j】和一个用于判断的表头数组number【】。

在开始进行八皇后棋子排列的时候,首先对行进行递增循环,即i初始值为0,每次i++,i最大值为8的循环。

在每次循环中产生一个小于8的随机数q,然后判断表头数组number【】中number【q】位置的值是否为1,如果不是,则在二维数组a【i】【q】位置上打印表示棋子的“K”;如果为1,则返回产生随机数的步骤继续产生随机数。

在循环到i>8时,跳出循环,这时候一个完整的八皇后排列也就出来了。

源代码:
package queen;
import java.awt.*;
import java.awt.event.*;
class equeen extends Frame implements ActionListener{
//构造界面和定义数组
Button enter;
Button clean;
Button exit;
int number[] = new int[8];
int i,j,q;
Label a[][] = new Label[8][8];
equeen(String s){
GridLayout grid;
grid = new GridLayout(9,8);
setLayout(grid);
enter = new Button("begin");
clean = new Button("clean");
exit = new Button("esit");
for(int i = 0;i<8;i++){
for(int j = 0;j<8;j++){
a[i][j] = new Label();
if((i+j)%2==0)a[i][j].setBackground(Color.yellow);
else a[i][j].setBackground(Color.gray);
add(a[i][j]);
}
}
for(int i = 0;i<8;i++){
number[i] = 0;//初始化判断数组
}
add(enter);
add(clean);
add(exit);
enter.addActionListener(this);
clean.addActionListener(this);
exit.addActionListener(this);
setBounds(100,100,300,300);
setVisible(true);
validate();
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==enter){
for(int i =0;i<8;i++){
for(int j=0;j<8;j++){
a[i][j].setText("");
}
}
for(int i =0;i<8;i++){
while(true){
q = (int)(Math.random()*8);
if(number[q]==0){
a[i][q].setText("K");
number[q] = 1;
break;
}
else if(number[q]!=0) continue;
}
}
for(int i = 0;i<8;i++){
number[i] = 0;
}
}
if(e.getSource()==clean){
for(int i = 0;i<8;i++){
for(int j = 0;j<8;j++){
a[i][j].setText("");
}
}
}
if(e.getSource()==exit){
System.exit(0);
}
}
}
public class queen {
public static void main(String[] args){ new equeen("八皇后问题");
}
}。

相关主题