zoukankan      html  css  js  c++  java
  • 8皇后算法的简单实现(回溯)

    package com.cai.learn.math;
    
    /**
     * 8皇后问题运算(回溯算法)
     * 思路:1.第一个皇后放在第一行,第一列
     *      2.第二行皇后放在第二行第一列,然后判断是否OK,如不OK,继续放在第二列,第三列....第8列,找个一个合适的位置
     *      3.继续第三个皇后.....
     *      4.得到一个正确的时候,在栈回退到上一个栈时,就会开始回溯。即第一个皇后第一列时得到所有正确的解
     *      5.然后回头把第一个皇后放在第二列,第三列...第8列 得出所有正确解
     */
    public class EightQueen {
        public static int count = 0;
        public static void main(String[] args) {
            //用数组存放 每行所在的位置
            int[] array = new int[8];
            getResult(array,0);
            System.out.printf("一共有%d种算法",count);//一共有92种算法
    
        }
        public static void getResult(int[] array,int n){
            if(n==8){
                count++;
                for (int i = 0; i < 8; i++) {
                    System.out.print(array[i]+"	");
                }
                System.out.println();
                return;
            }
            //8列,第1列。第2列....第8列
            for (int i = 0; i < 8; i++) {
                array[n] = i;
                if(isRight(array,n)){
                    getResult(array,n+1);
                }
            }
    
        }
    
        /**
         * 判断第n行的位置是否正确
         * @param arr 已经排列的位置
         * @param i 第几行(i可能是0)
         * @return
         */
        public static boolean isRight(int[] arr,int i){
            for (int k = 0; k < i; k++) {
                //同一列,同一斜线上为false
                if (arr[k]==arr[i]||Math.abs(i-k)==Math.abs(arr[i]-arr[k])){
                    return false;
                }
            }
            return true;
        }
    }
  • 相关阅读:
    QLPreviewController来预览文件
    Camera360SDK
    实现 JSON + Jquery+.Net ajax功能
    showModalDialog传值
    web方式AJAX调用
    CRM4.0多个实体关联查询
    用javascript 动态添加部门和人员
    GridView中使用超连接
    根据订单号查询出订单附属实体
    sql 常用聚合函数
  • 原文地址:https://www.cnblogs.com/cai170221/p/13698078.html
Copyright © 2011-2022 走看看