回溯算法 八皇后

什么是回溯算法

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

常见的案例

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

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容