当前位置:
文档之家› JAVA求解N皇后问题代码及答案
JAVA求解N皇后问题代码及答案
new NQueen(); // TODO Auto-generated method stub
}
////////////////////////////////////////画棋盘和皇后的位置 ///////////////////////////////////////
@SuppressWarnings("serial") public class Panel4 extends Applet {
r1.addItemListener(this); r2.addItemListener(this); r3.addItemListener(this); r4.addItemListener(this); r5.addItemListener(this);
button1.addActionListener(this); button2.addActionListener(this); button3.addActionListener(this);
g2.drawLine(i*(240/m)+20,20, i*(240/m)+20,260); g2.drawLine(20, i*(240/m)+20, 260, i*(240/m)+20);
} g2.setColor(Color.blue); for(int i=1;i<=m;i++) {
g2.drawString("Q",30+(X[j][i]-1)*(240/m),10+i*(240/m)); }
cp.add(panel1,BorderLayout.WEST); cp.add(panel4,BorderLayout.CENTER); cp.add(scrollPane1,BorderLayout.EAST);
f.setSize(865,600); f.setVisible(true); f.addWindowListener(new WindowAdapter(){
{ x[k]=x[k]+1;
} if(x[k]<=n)
if(k==n) {
counter++; for(int i=1;i<=n;i++) {
X[a][i]=x[i]; str[a]=str[a]+x[i]+","; } a++; System.out.print("\n"); } else { k=k+1; x[k]=0; } else k=k-1; } return; } ///////////////////////判断皇后位置的合法性/////////////////// public boolean place(int b) { int k=b,i=1; while(i<k) { if(x[i]==x[k] || Math.abs(x[i]-x[k])==Math.abs(i-k)) return(false); i=i+1; }
JButton button1=new JButton("开始演示"); JButton button2=new JButton("暂停"); JButton button3=new JButton("清空");
JSlider slider1=new JSlider(20,100);
javax.swing.Timer timer1; /////////////////////////////////////////////窗口的布局
////////////////////////////////////// public NQueen() { cp.setLayout(new BorderLayout(20,20));
t2.setBorder(BorderFactory.createTitledBorder("解的个数: "));
slider1.setPaintTicks(true); slider1.setMajorTickSpacing(40); slider1.setMinorTickSpacing(20); slider1.setPaintLabels(true);
slider1.setPaintTrack(true); slider1.setSnapToTicks(true); slider1.addChangeListener(this); slider1.setBorder(BorderFactory.createTitledBorder("调节 演示的速度"));
Panel4 panel4=new Panel4();
TextArea t1=new TextArea(30,40); JTextField t2=new JTextField(10);
JRadioButton r1=new JRadioButton("4个"); JRadioButton r2=new JRadioButton("5个"); JRadioButton r3=new JRadioButton("6个"); JRadioButton r4=new JRadioButton("7个"); JRadioButton r5=new JRadioButton("8个");
ButtonGroup buttong1=new ButtonGroup(); buttong1.add(r1); buttong1.add(r2); buttong1.add(r3); buttong1.add(r4); buttong1.add(r5);
panel1.add(panel2); panel1.add(panel3);
实验题目:回溯法—n 皇后问题
班级:信息 112
姓名:孙波
学号:110111213 日期:2014-5-13
一、 实验目的
会用回溯法求解 n 皇后问题,通过实验掌握如何使用回溯法求解问题。
二、 实验要求 用自己熟悉的高级程序设计语言编写程序实现求解 n 皇后问题的回溯算法。 使用剪枝函数来避免不必要的搜索。
return(true); }
//////////////////////////////////////主方法 //////////////////////////////////////////////
/** * @param args */ public static void main(String[] args) {
import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JSlider;
JScrollPane scrollPane1=new JScrollPane(t1); scrollPane1.setBorder(BorderFactory.createTitledBorder(" 展示所有解:"));
JPanel panel1=new JPanel(); panel1.setLayout(new GridLayout(2,1,10,20)); JPanel panel2=new JPanel(); panel2.setLayout(new GridLayout(6,1)); panel2.setBorder(BorderFactory.createTitledBorder("请选择 皇后的个数:")); JPanel panel3=new JPanel(); panel3.setLayout(new GridLayout(4,1,10,10));
timer1=new javax.swing.Timer(slider1.getValue()*25,this);
Hashtable<Integer, JLabel> table=new Hashtable<Integer, JLabel>();
table.put(new Integer(20), new JLabel("快")); table.put(new Integer(100), new JLabel("慢")); slider1.setLabelTable(table);
三、 源程序(带注释)
import java.applet.Applet; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.TextArea; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.Hashtable;