八皇后问题:在8*8格的棋盘上放置8个皇后, 任何两个皇后不得在同一行或者同一列或者同一斜线上
package com.wang;
public class Test {
int max=8;
int[] arr=new int[max];
int count=0;
public static void main(String[] args) {
Test test = new Test();
test.cheek(0);
System.out.println("有"+test.count+"种解法");
}
private void cheek(int n) {
//如果全部放置完毕则退出
if (n==max) {
print();
return;
}
//依次放置皇后
for (int i = 0; i < max; i++) {
//先把当前皇后放到,该行第一列
arr[n]=i;
//判断是否冲突
if (judge(n)) {
//继续放置下一个
cheek(n+1);
}
}
}
//放置第N个皇后时,是否冲突
private boolean judge(int n) {
for (int i = 0; i < n; i++) {
//因为每次传入的n不同所以不需要判断是否在同一行
//arr[i] == arr[n]判断是否在同一列
//Math.abs(n-i)==Math.abs(arr[n]-arr[i]判断是否在同一斜线
if (arr[i] == arr[n]||Math.abs(n-i)==Math.abs(arr[n]-arr[i])) {
return false;
}
}
return true;
}
public void print() {
count++;
for (int i = 0; i <arr.length;i++) {
System.out.print(arr[i]);
}
System.out.println();
}
}