zoukankan      html  css  js  c++  java
  • 八皇后问题

    这个还是有点意思的

    代码分为check部分和递归部分

    //程序运行后输出八皇后问题的解的数量
    public class EightQueens {
        public int[] a = { -1, -1, -1, -1, -1, -1, -1, -1 }; // 元素默认值是-1
        public int ways = 0; // 解决方案计数器
    
        public boolean check(int row, int col) { // 在row行,col列可以放置皇后吗?
            // 初始行,第一行,无须判断,可以放皇后,下面的循环不执行
            for (int i = 0; i < row; i++) {
                if (a[i] == col) { // 判断同列是否有皇后冲突
                    return false; // 返回0表示不能放,有冲突
                }
                if (row - i == Math.abs(col - a[i])) { // 判断对角线是否有皇后冲突,注意调用了绝对值函数
                    return false;
                }
            }
    
            return true;
        }
    
        // 此函数实现在第n行放置皇后, 第n行的某一列如果放皇后,则a[n]的值由-1改为该列的列值
        public void place(int n) {
            if (n == 8) { // 递归函数的出口,从0到7行都已经放置完毕,并且都是正确的,所以当n=8的时候,
                // 方案数加1
    
                ways++;
    
                // 可以将a[n]的值输出,此处代码省略
    
            } else {//核心代码
                    //i 表示 column 
                    //这一部分实现了依次检索第n 行的第i列,判断是否可以放皇后,如果没有一个位置可以放,函数就
                    //结束了说明之前的放置都是无效的...
                    for(int i = 0; i < 8; i++){
                        a[n]=i;
                        if(check(n, i)){
                            place(n+1);
                        }
                    }
            }
        }
    
        public static void main(String[] args) {
            EightQueens eq = new EightQueens();
            eq.place(0);
            System.out.println(eq.ways);
        }
    
    }
    你若笃定,世界便不浮躁。
  • 相关阅读:
    day03接口的初期认识
    day03模板方法设计模式
    day02抽象类的练习
    day02抽象类1
    final 关键字
    day01子类与父类特点
    day01继承extends
    day01函数的重载
    图解HTTPS
    编译的时候遇到 The type java.lang.Object cannot be resolved.
  • 原文地址:https://www.cnblogs.com/zhangyue123/p/9276846.html
Copyright © 2011-2022 走看看