美文网首页
递归回溯算法与八皇后问题

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

作者: 墨宇暗黑 | 来源:发表于2022-02-13 18:49 被阅读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();
        }
    }
    

    相关文章

      网友评论

          本文标题:递归回溯算法与八皇后问题

          本文链接:https://www.haomeiwen.com/subject/tmfqlrtx.html