递归回溯算法与八皇后问题
2022-02-13 本文已影响0人
墨宇暗黑
八皇后问题:在一个8x8的格子里面摆放8个皇后,每两个皇后不能处于同一列或则同一行,或则同一斜线
对于这个问题就需要用到回溯算法,我们在没走一步的时候去进行判断这一步是否符合规则,不符合规则则回退一步,不过采用递归的算法可能没有那么容易看出回溯的思想
解决思路,定义一个长度为8的整型数组new int[8],第一个代表第一行第i列,第二个代表第二行第i列
来看以下代码,需要根据自己取理解
public class Huanghou8 {
private static int[] array = new int[8];
private static int count = 0;
public static void main(String[] args) {
check(0);
System.out.println(count);
}
//这个是主要的递归方法
public static 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 static 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 static void print(){
count++;
for (int i : array) {
System.out.print(i + " ");
}
System.out.println();
}
}