递归算法解决八皇后问题
package com.example.datastructures.recursion;
import java.util.Arrays;
/**
* @author maoyouhua
* @version jdk21
*
* 八皇后回溯算法
* 八皇后问题:
* 8*8棋盘上横竖斜不能有两个棋子
*/
public class Queen8 {
static int max = 8;
static int count = 0;
static int[] arr = new int[max];
/**
* 放置8个棋子
*
* arr[0] = 0 第一个子放在第0号位置上(实际上可以放在0-7)
* arr[1] = 0 第二个子判断不能放在0和1上,只能放在2-7
* arr[2] = 0 判断。。。
* arr[3] = 0
* arr[4] = 0
* arr[5] = 0
* arr[6] = 0
* arr[7] = 0 当来到第八个执行完结束
* 放置棋子
* @param num 表示第几个棋子
*/
public static void handle(int num){
if (num == max) {
System.out.println(Arrays.toString(arr));
count++;
return;
}
for (int i = 0; i < max; i++) {
arr[num] = i;
if (judge(num)){
handle(num + 1);
}
}
}
/**
* 判断当前棋子是否冲突
* @param num
* @return
*/
public static boolean judge(int num){
for (int i = 0; i < num; i++) {
if (arr[i] == arr[num] || Math.abs(num - i) == Math.abs(arr[num] - arr[i])){
return false;
}
}
return true;
}
public static void main(String[] args) {
handle(0);
System.out.println("count :" + count);
}
}