最近感觉有些迷惘不知道做什么,于是翻了下算法,看到了八皇后问题,于是研究了一下。
Java代码如下
public class Queen8 {
static int sum=0;
final static int n=8;
static int[] x=new int[8];
public static void main(String[] args) {
// TODO Auto-generated method stub
backTrack(0);
System.out.println(sum);
}
public static void backTrack(int t) {
if (t>=n) {
sum++;
}
else {
for (int i = 0; i < n; i++) {
x[t]=i;
if (place(t)) {
backTrack(t+1);
}
}
}
}
public static boolean place(int k) {
for (int j = 0; j < k; j++) {
if ((Math.abs(k-j)==Math.abs(x[k]-x[j]))||(x[k]==x[j])) {
return false;
}
}
return true;
}
}
这里采用的递归回溯的方法主要说一下两个函数
place函数:用来判断横向、纵向和斜向的条件是否满足,如果出现在同一横向、纵向或者斜向就返回false,否则返回true。
backTrack函数:用来递归判断不同的情况,一旦t大于或等于n,说明产生了一个满足条件的解。
这里是8*8的问题,最后的结果是92。总的来说方法很简单,但是还可以改进,可以减小时间复杂度,这里就不多说了。