递归回溯算法与八皇后问题

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();
    }
}
上一篇下一篇

猜你喜欢

热点阅读