需求:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
package com.zsp.service;
import java.util.Arrays;
/**
* @title: EightQueens
* @Author zsp
* @Date: 2022/11/5 14:34
* @Version 1.0
*/
public class EightQueens {
int max =8;
int []array = new int[max];//索引+1=行 值为列
int count;
//放置第n个皇后
public void check(int n){
if (n==8){
print();
count++;
return;
}
for (int i = 0; i < array.length; i++) {
array[n]=i;
if (judge(n)){
check(n+1);
}
}
}
//校验放置第n个皇后是否跟前面的冲突
public Boolean judge(int n){
for (int i = 0; i < n; i++) {
//是否在同一行和同一斜线
if (array[i]==array[n]||Math.abs(n-i)==Math.abs(array[i]-array[n])){
return false;
}
}
return true;
}
public void print(){
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
System.out.println();
}
public static void main(String[] args) {
EightQueens eightQueens = new EightQueens();
eightQueens.check(0);
System.out.println(eightQueens.count);
}
}