递归解决八皇后回溯算法

2023-11-13

问题简述:八皇后问题是一个古来而著名的问题,该问题是19世纪著名的数学家高斯同学提出来的。在8*8的国际象棋上摆放八个皇后,使其不能互相的攻击,也就是说,任意的两个皇后不能放在同一行或则是同一个列或者是同一个对角线上,问有多少个摆放的方法

代码:

package com.yg.recursion;/*
@author  GeQiLin
@date    2020/2/24  20:30
求解8皇后问题
*/

public class Queen8 {
    /*
     * arr[i]=value代表第i+1个皇后在第value+1个位子,
     * */
    private int MAX=8;
    private int[] arr=new int[MAX];//存放皇后的位置
    private int count=0;
    public static void main(String[] args) {
        Queen8 queen=new Queen8();
        queen.check(0);
        System.out.println("共有"+queen.count+"种摆法");
    }

//放置第n个皇后
    private void check(int n){
        //此时8个皇后已经存放完成,应为n是从0开始
        if(n==MAX){
            printfArr();
            return;
        }
        /*
        * for循环作用
        * 1.冲突时,用于移动位置使得不冲突
        * 2.不冲突时配合递归,可以依次摆放下一个皇后的位置
        * 3.当出现一种摆法后,从最后一个皇后的位置开始改变尝试新的摆法
        * */
        for (int i = 0; i <MAX; i++) {
            arr[n]=i;//用于移动皇后的位置
            if(!judge(n)){
                //不冲突,摆放下一个皇后
                check(n+1);
            }
        }

    }

    /*
    判断是否冲突
    * 每一个皇后不能在同一行,同一列,同一斜线
    * n为第几个皇后
    * */
    private boolean judge(int n){
        //判断地n个皇后与前面第n+1个皇后位置是否冲突
        for (int i = 0; i < n; i++) {
           //判断是不是在同一列,或者一条斜线上
            if(arr[i]==arr[n] || Math.abs(i-n)==Math.abs(arr[i]-arr[n])){
                return true;
            }
        }
        return false;
    }

    //打印皇后位置
    private void printfArr(){
        count++;
        for (int i = 0; i < MAX; i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

递归解决八皇后回溯算法 的相关文章

随机推荐

  • Python爬虫实战 爬取同城艺龙酒店信息

    1 爬虫说明 同城艺龙的反爬做的是非常好的 本博主在与同城艺龙进行了一整天的殊死搏斗才将其完全的爬下来 本博主是以无锡为例 将无锡的所有酒店的相关信息都爬了下来 共3399条酒店数据 当然其他城市也是可以的 只需要修改指定字段即可 本博主是
  • 阿里云视频vod.cn-beijing.aliyuncs.com (Domain name not found)

    今天edusoho网校系统突然爆 An exception has been thrown during the rendering of a template Server unreachable Errno 6 Could not re
  • Dynamics CRM 后台代码如何发邮件《 中秋快乐!》

    前面搞了邮箱的配置 那么就可以借助Dynamics CRM工作流来给用户发邮件了 比如签核提醒 什么的 对于这些收件人简单的固定且存在CRM中 比如用户或者联系人的 通过配置就可以实现 但是当邮件通知的人不在CRM中或者收件人cc复杂时 无
  • 记录xss练习 level1-level5(一)

    练习网址 http test xss tv 本人菜鸟一枚 如有分析不对的地方 望前辈们指正 话不投机 不对 话不多说直接上图 上分析 level1 很简单的一道题 从URL中我们可以分析到 xxx level1 php name test
  • 图像处理学习路线总结 python

    记录一下我的图像处理学习路线 后续有其他想法了再补充 目录 1 图像处理基础知识 1 1 数字图像处理公开课 2 利用opencv进行实现 2 1 在pycharm里安装opencv库 2 2 图像处理基础操作 2 2 1 读取图片 2 2
  • Android 控件最上层显示方法

    view bringToFront 可以讲布局在下层的控件放到上层 不被其他控件挡住
  • rails的一点点认识

    1 会开创新项目 rails new 名称 2 会创建控制类 rails g generate controller 类名 html文件名 3 会创建model rails g generate model 名称 散列属性key value
  • ipsec openswan资料搜集

    http blog csdn net rosetta article category 1190390 http blog chinaunix net uid 127037 list 1 html sid 136058 http blog
  • 大数据面试题(五)----HIVE面试题

    版权声明 本文为CSDN博主 北京小辉 的原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接及本声明 原文链接 https blog csdn net silentwolfyh article details 103
  • 在进入微信小程序之前显示登录页面的解决方案

    这几天想要在小程序进入之前做个登陆的页面 用户输入账号密码正确才能进入小程序 但是看了因为小程序一启动就是默认进入tabar里的第一个页面 上了百度查也是没有哦好的方式 自己琢磨了以下的几种方式 1 使用路由重定向 小程序中有几个用于重新向
  • Spring整合mybatis完整maven配置

    Spring整合mybatis完整maven配置 Maven配置 2022年1月23 基本都是最新版本
  • HTML 表单标签

    一 什么是表单标签 表单是用来采集用户的输入数据 然后将数据提交给服务器 二 表单的组成 一个表单有三个基本组成部分 表单标签 这里面包含了处理表单数据所用程序的URL以及数据提交到服务器的方法 表单域 包含了文本框 密码框 隐藏域 多行文
  • #1295-D: Deprecated declaration I2C_Start - give arg types

    KEIL5编译器报警告 警告内容如下 1295 D Deprecated declaration I2C Start give arg types 警告原因无参数函数的函数声明没有标明参数为void型 在函数声明中加入void即可 警告代码
  • 1.Kubernetes基础入门学习概述系统架构及组件浅析

    目录 0x00 基础简述 1 发展经历 2 简要介绍 3 系统架构 Borg 系统 Kubernetes 系统 0x01 组件浅析 1 Kubernetes Master 2 Kubernetes Node 3 Kubernetes 插件
  • Keras利用卷积神经网络(CNN)识别手写数字(环境python3.5)

    今天介绍如何利用卷积神经网络进行MNIST数据集的手写数字识别 即将手写数字图像images识别为数字标签labels 目录 数据预处理 模型建立 评估模型准确率 进行预测 建模思路如下图 数据预处理 MNIST数据集共有训练数据60 00
  • json to dart工具

    工具链接https javiercbk github io json to dart
  • 单片机开发---ESP32S3移植lvgl+触摸屏

    书接上文 单片机开发 ESP32 S3模块上手 本章内容 熟悉一下ESP32S3的开发 修改范例程序的lvgl 使之能够匹配现在的显示屏 具体工作大概为通过SPI接口连接一块SPI串口屏幕 并且适配lvgl 最后加上触摸屏作为输入 屏幕 用
  • 判断是pc端还是移动端

    Navigator对象 Navigator 对象包含有关浏览器的信息 下面的userAgent 属性是一个只读的字符串 声明了浏览器用于 HTTP 请求的用户代理头的值 所以我们可以通过判断navigator useragent里面是否有某
  • 微信小程序-拒绝了语音权限后,重新授权

    效果图 第一步 封装在utils里 哪个页面需要的话 直接调用 export function impower var t this wx authorize scope scope record success res fail wx s
  • 递归解决八皇后回溯算法

    问题简述 八皇后问题是一个古来而著名的问题 该问题是19世纪著名的数学家高斯同学提出来的 在8 8的国际象棋上摆放八个皇后 使其不能互相的攻击 也就是说 任意的两个皇后不能放在同一行或则是同一个列或者是同一个对角线上 问有多少个摆放的方法