package suanfa;
//8皇后问题
public class Queen8 {
//定义8个皇后
int max = 8;
//由一维数组代替二维数组。索引代表行数也代表第几个皇后
//值代表位置在第几列
int[] arr = new int[max];
//count解法,judgeCount判断次数。
static int count = 0;
static int judgeCount =0;
public static void main(String[] args) {
Queen8 q = new Queen8();
q.check(0);
System.out.printf("一共有%d种解法", count);
System.out.printf("一共判断冲突%d次", judgeCount);
}
//打印数组
private void print() {
for(int i=0;i<max;i++) {
System.out.print(arr[i]+"");
}
System.out.println();
}
//判断是否在同一列或者同一斜线上
private boolean judge(int n) {
judgeCount++;
for(int i=0;i<n;i++) {
//arr[i]==arr[n] 表示第n-1个皇后是否和前面的在同一列
//第二个条件判断第n-1个皇后与第i个皇后是否在同一斜线,用行差绝对值等于列差绝对值。
if(arr[i] == arr[n]||Math.abs(n-i)==Math.abs(arr[n]-arr[i])) {
return false;
}
}
return true;
}
//放置皇后
private void check(int n) {
if(n == max) {//n=8是代表的是第九个皇后,表示前8个皇后放好了
print();
count++;
return;
}
for(int i =0;i<max;i++) {
//把当前皇后放在i列,从第一列开始放
arr[n] =i;
if(judge(n)) {//这里true表示不冲突
check(n+1);
}
}
}
}
八皇后代码
最新推荐文章于 2024-09-01 13:40:51 发布