上次写了皇后问题,发现网上有递归解法,于是自己写写,发现问题还是不少,花了不少功夫(linux java环境出错……)
package test.demo;
public class Eight {
public static void main(String[] args) {
put(1);
}
static int m[] = new int[5];
public static void print() {//输出方法
for (int i = 1; i < 5; i++) {
System.out.print(m[i]);
}
System.out.println();
}
public static void put(int i) {
if (i > 4) {
return;
}
if (i == 0) {
return;
}
while (m[i] <= 4) {
m[i]++;
if (m[i] <= 4) {
if (test(i, m[i]) == true) {
if (i == 4) {//全部放完输出
print();
} else {
int tmp = i + 1;//放下一个
m[tmp] = 0;
put(tmp);
break;
}
}
}
}
if (m[i] > 4) {//回溯
int m = i – 1;
put(m);
}
}
public static boolean test(int i, int j) {//测试能否放下
int k = 1;
while (k < i) {
if (m[k] == m[i] || (Math.abs(i – k) == Math.abs(m[i] – m[k]))) {
return false;
}
k++;
}
return true;
}
}