博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
八皇后问题
阅读量:6951 次
发布时间:2019-06-27

本文共 1344 字,大约阅读时间需要 4 分钟。

这个还是有点意思的

代码分为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); }}

 

转载于:https://www.cnblogs.com/zhangyue123/p/9276846.html

你可能感兴趣的文章
递增三元数组——第九届蓝桥杯C语言B组(省赛)第六题
查看>>
字符,字节和编码, ASCII码, DBCS码,SBCS码 与Unicode码
查看>>
物件捆绑 背包问题 动态规划 求解
查看>>
finish
查看>>
查看系统信息msinfo32工具的使用
查看>>
iso系统镜像刻录到光盘和U盘
查看>>
tcp四次挥手
查看>>
windows服务初识
查看>>
jqgrid 点击列头的超链接或按钮时,不触发列排序事件
查看>>
自定义Collection类
查看>>
第十章
查看>>
JMeter 如何把上一个请求的结果作为下一个请求的参数 —— 使用正则提取器
查看>>
开源软件
查看>>
我对数据库的认识
查看>>
silverlight 学习笔记 (八):Prism中MEF的初步认识
查看>>
环境配置就是安装软件,修改软件的配置文件,安装软件就是文件的复制,与新增--linux下一切皆文件...
查看>>
11.27号
查看>>
c++ STL模板(一)
查看>>
JAVA面向对象概述
查看>>
mysql触发器
查看>>