美文网首页
回溯算法 八皇后

回溯算法 八皇后

作者: 叫我小码哥 | 来源:发表于2020-04-01 10:34 被阅读0次
    什么是回溯算法

    回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。

    常见的案例

    二叉树的前中后遍历,图的遍历等等。

    8皇后简介

    八皇后算法描述如下:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法!


    图1
    JAVA代码
        int[] clos = null;
        int count = 0;
        public void placeQueues(int n){
            if(n < 1){
                return;
            }
            clos = new int[n];
            queue(0);
            System.out.println(n+"皇后一共有"+count+"种摆发");
        }
    
        public void  queue(int row){
            if(row == clos.length){
                count ++;
                print();
                return;
            }
            for(int col=0;col<clos.length;col++){
                if(isCheck(row,col)){
                    clos[row] = col;
                    //回溯算法的核心就在此
                    queue(row+1);
                }
            }
        }
    
        public boolean isCheck(int row,int col){
            for(int i=0;i<row;i++){
                if(col == clos[i]) return false;
                if(row-i == Math.abs(col-clos[i])) return false;
            }
            return true;
        }
    
    
        public void print(){
            for(int row=0;row<clos.length;row++){
                for(int clo=0;clo<clos.length;clo++){
                    if(clos[row] == clo){
                        System.out.print("1 ");
                    }else{
                        System.out.print("0 ");
                    }
                }
                System.out.println();
            }
            System.out.println("--------------------------");
        }
    
    运行结果
    图2

    相关文章

      网友评论

          本文标题:回溯算法 八皇后

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