问题描述在一个8*8的棋盘上摆放8个皇后,使得每个皇后不在同一行,同一列,同一斜线
/**
* @author ming
* @create 2022/6/13
* @description:
*/
public class Queue8 {
public int[] arr = new int[8];
String[][] arr2 = new String[8][8];
int count = 0;
public void getMap(){
for (int i = 0; i < arr2.length; i++) {
for (int j = 0; j < arr2.length; j++) {
arr2[i][j] = "○-";
}
}
}
/**
* 判断皇后是否冲突
* @param n 放入的第n个皇后
*/
public boolean jude(int n){
for (int i = 0; i < n; i++) {
if((arr[n]==arr[i])||(Math.abs(n-i)==Math.abs(arr[n]-arr[i]))){
return false;
}
}
return true;
}
private void print(){
count++;
// {5,2,1,3,0,4,6,7}
for (int i = 0; i < arr.length; i++) {
arr2[i][arr[i]]="●-";
}
System.out.println("******"+"第"+count+"种解法*****");
for (int i = 0; i < arr2.length; i++) {
for (int j = 0; j < arr2.length; j++) {
System.out.print(arr2[i][j]);
}
System.out.println();
}
for (int i = 0; i < arr.length; i++) {
arr2[i][arr[i]]="○-";
}
}
public void check(int n){
if(n==arr.length){
print();
return ;
}
for (int i = 0; i < arr.length; i++) {
arr[n] = i;
if(jude(n)){
check(n+1);
}
}
}
public static void main(String[] args) {
Queue8 queue8 = new Queue8();
queue8.getMap();
queue8.check(0);
}
}