public class Queue8 {
private static int max =8;
private static int[] arr= new int[8];//临时存储八皇后 下标代表第几行 值代表第几列
private static int count=0;
//判断当前的结点是否冲突
public static boolean judge(int n){
for(int i=0;i<n;i++){
if(arr[i]==arr[n] || (Math.abs(i-n)==Math.abs(arr[i]-arr[n]))){//同列 或者斜行
return false;//表示当前的结点冲突
}
}
return true;//表示当前结点不冲突
}
public static void printMap(){
for(int i=0;i<max ;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
}
//回溯检测
public static void check(int n){
if(n==max){
printMap();
count++;
}else{
for(int i=0;i<max;i++){
//先将第n个皇后存放在放在第i列
arr[n]=i;
if(judge(n)){//判断该皇后的位置是否合适
check(n+1);
}
}
}
}
public static void main(String[] args) {
check(0);
System.out.println(count);
}
}
八皇后问题-回溯算法
最新推荐文章于 2022-05-17 20:14:46 发布