八皇后问题是在一个8*8的棋盘内,如何放置8个互不冲突的皇后。我们知道,皇后可以横、直、斜不限距离移动。我们基本上用的是回溯解决此类问题,我这两天看到了不少的八皇后问题解题办法。在我看来,比较高明的解题办法是这种:
public class Queen{
//同列是否有皇后,1表示有
private int[] column;//右上至左下是否有皇后
private int[] rup;//左上至右下是否有皇后
private int[] lup;//解答
private int[] queen;//解答编号
private int num;
public Queen(){
column=new int[8+1];//纵列 共8列 下面的循环式从1开始的 故加1
rup=new int[(2*8)+1];//右斜纵列 从左上到右下 共有16列
lup=new int[(2*8)+1];//左斜纵列 从右上到左下 共有16列
for(int i=1;i<=8;i++)
column[i]=0;
for(int i=1;i<=(2*8);i++)
rup[i]=lup[i]=0; //初始定义全部无皇后
queen=new int[8+1];
}
public void backtrack