递归-解决八皇后问题
在8*8的二维数组上放置8个棋子,每个棋子之间不在同一行,不在同一列,不在同一斜线,求有多少种摆法。
思路:
1) 第一行棋子从第一列开始摆放
2) 第二行棋子从第二行第一列开始摆放,分别判断是否可行,不可行的话,就继续尝试第二行第二列,第三列,第四列……
3) 继续摆放第三行的皇后,重复这个过程
4) 得到一个正确的解,继续这个过程,知道第一行第一列的棋子的所有正确解都得到
5) 移动第一个皇后,直至将所有列遍历
package com.dataStructure;
import java.util.List;
public class QueenN {
static int count = 0;
int size = 8;
int[] array = new int[size];
public static void main(String[] args){
QueenN queenN = new QueenN();
queenN.check(0);
System.out.println("解法的数量为"+count);
}
public void check(int n){
if(n == 8){
print();
return;
}
for (int i = 0; i<8; i++){
array[n] = i;
if(judge(n)){ //如果满足条件
check(n+1);
}
}
}
//判断是否符合规则
public boolean judge(int n) {
for (int i = 0; i < n; i++) {
if (array[i] == array[n] || Math.abs(n - i) == Math.abs(array[n] - array[i])) {
return false;
}
}
return true;
}
//打印输出
public void print(){
for(int i = 0;i<array.length ;i++){
System.out.print(array[i]+" ");
}
System.out.println();
count++;
}
}