关于递归回溯算法的案例(8皇后问题案例)

递归回溯解决八皇后问题 基于尚硅谷数据结构的笔记总结 阅读详情

关于递归回溯算法的案例

在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。如果经过±90度、±180度旋转,和对角线对称变换的摆法看成一类,共有42类。计算机发明后,有多种计算机语言可以编程解决此问题。

public class Queue8 {

    int max = 8 ; // 定义一个max表示共有多少个皇后
    int[] array = new int[max]; // 定义数组array,保存皇后放置位置的结果
    static int count = 0 ;

    public static void main(String[] args) {
        Queue8 queue8 = new Queue8();
        queue8.check(0);
        System.out.printf("一共有%d解法",count);

    }

    private void check(int n ){
        if ( n == max ){  // n=8,就是8个皇后已经放好
            print();
            return;
        }
        //依次放入皇后,并判断是否冲突
        for (int i = 0 ; i < max ; i++){
            array[n]=i;   //先把当前的这个皇后,放到当前的第一列
            if (judge(n)){ //不冲突
                //接着放n+1个皇后,即开始递归
                check(n+1);
            }   //如果冲突,就继续执行array[n]=i,即将第n个皇后,放置在本行的后移的一个位置
        }

    }

    private boolean judge(int n ){
        for (int i = 0  ; i < n ; i ++ ){
            if (array[i]==array[n] || Math.abs(n-i) == Math.abs(array[n]-array[i])){
                return false;
            }
        }
        return true;
    }

    private  void print(){
        count++;
        for ( int i = 0 ; i < array.length ; i++){
            System.out.print(array[i]+" ");
        }
        System.out.println();
    }
}
八皇后问题(递归,回溯算法) 八皇后问题 问题介绍:八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1884年提出:在8*8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行同一列或者同一直线上问有多少种摆法。 思路 1.第一个皇后先放在第一列 2.第二个皇后放在第二行第一列,然后判断是否OK(及判断是否冲突),如果不OK,继续放在第二列,第三列,依次... 阅读详情

相关推荐

经典算法八皇后问题的详解以及回溯(递归)代码示例

对经典算法八皇后问题的说明,以及代码示例,代码中有详尽的注释,有助于读者充分理解其递归调用的逻辑!

【八皇后问题】递归算法学习系列之八皇后问题

http://www.cnblogs.com/jillzhang/archive/2007/10/21/922830.html http://www.cnblogs.com/drizzlecrj/archive/2007/10/04/913703.html 1.引子    中国有一句古话,叫做“不撞南墙不回头",生动的说明了一个人的固执,有点贬义,但是在软件编程中,这

jack_incredible的专栏 1485

8-Queens:回溯算法解决8个皇后问题

该程序解决了8个皇后区问题。 8个皇后问题是一个问题,您需要将8个皇后放置在标准8x8棋盘上,这样才能避免2个皇后相互攻击(水平,垂直或对角线中不得有2个皇后在同一条直线上) )

八皇后问题,秒懂递归回溯(有图详解|c语言)

前言: 各位和我一样的刚学完递归的小白们,是不是突然遇见了一个大BOSS,八皇后问题!!把自信的说着“老子递归学好了!”的你一棒子打回了出生点,就像你刚玩只狼遇到的那个大胖子,刚玩原神遇到的雪山。今天,我就和大家一起学习一下这个著名的八皇后问题。

c0re的博客 2万+

八皇后问题 递归(回溯法求解)

八皇后问题 递归(回溯法求解),很简洁,欢迎下载交流。

WSL中使用VMD图形化界面

【代码】WSL中使用VMD图形化界面。

handsome213的博客 839

八皇后问题

Description 给定一个8*8棋盘,要求在棋盘上放8个皇后,并且各个皇后之间不能相互攻击。 当两个皇后位于同一行或同一列或同一对角线(有两条)就会相互攻击。 现在要求大家编程输出8皇后问题的所有解。 注意:皇后是逐行放的,也就要求大家输出每一行放皇后的列号的序列,行号和列号都是从1开始的Input无Output 每一行输出一个解决方案; 要求输出所有方案。 每个

Mr.Tong的博客 376

浅谈武术擂台格斗机器人大赛

武术擂台机器人赛是工科类专业的一个跨学科的竞赛项目,它涵盖了机械结构、硬件电路和计算机程序等技术领域。笔者在校期间有幸参加过四次这样的比赛,有成功也有失败,对此深有感悟。本文仅为个人观点,有说得不对的地方,望积极指出,希望能帮助到有需要的人。

weixin_43811044的博客 1万+

递归回溯解决8皇后问题,并且求出判断的次数

8皇后是非常经典的递归回溯问题,具体如何实现与理解可以边看代码边理解,代码中注释写的非常详细,如有无法理解的部分可在评论留言。 package day08; /** * @Author: taoqianlilang * @Description: * @Date: Created in 15:39 2020/4/9 * @Modified By: */ public class Q...

李浪 的博客 337

从Peer到脉冲地震波:免费Python工具全流程配置教程(PyCharm+Anaconda)

本文详细介绍了如何使用Python工具链(PyCharm+Anaconda)实现从Peer数据库获取地震波数据到生成脉冲地震波的全流程配置。通过开源工具EQTOOL和PySeismicGen,结合Python环境搭建、数据格式转换和脉冲地震动生成技术,为结构抗震分析提供高效、灵活的解决方案。

weixin_29093169的博客 430

解锁SPWM电压利用率:三次谐波注入幅值的黄金分割点

本文深入探讨了SPWM电压利用率的提升方法,重点介绍了三次谐波注入技术及其黄金分割点(1/6比例)。通过数学推导和工程实践,揭示了如何通过特定幅值的三次谐波注入将电压利用率从86.6%提升至115%,与SVPWM相当。文章还提供了实验室调试流程和DSP实现代码,帮助工程师优化逆变器设计。

weixin_30729609的博客 915

递归————八皇后问题(回溯算法)

八皇后问题介绍 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯.贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,间有多少种摆法。 八皇后问题算法思路分析 1)第一个皇后先放第一行第一列 2)第二个皇后放在第二行第一列、然后判断是否oK[即判断是冲突],如果不oK,继续放在第二...

lkking的博客 547

Vue3 - vite 项目报错:Uncaught ReferenceError: require is not defined(解决 vue3 vite 项目无法识别 require 语法导致报错)

vue3,vite,报错解决,vue3+vite报错requireisnotdefined,vue3vite引插件不识别require,老插件必须用require怎么办,vite项目插件要求使用require引入但报错,vue3不兼容require导致第三方包插件无法使用,vue3vite中使用require报错怎么办,解决Vite+vue3使用第三方依赖报错“requireisnotdefined”问题,vite项目require语法兼容问题解决requireisnotdefine

🏆 前端领域优质创作者 2万+

【C/C++】回溯经典算法之-->八皇后问题

一、八皇后问题 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。

皓皓松的博客 5万+

【STM32实物】基于STM32+ESP32+手机APP设计的智能宠物喂食系统

本文以STM32单片机为主控MCU,配有压力传感器、温湿度传感器、光照强度传感器、蜂鸣器等,设计了一款可以远程控制的宠物智能喂食系统。用户可以通过APP下达指令,控制宠物的喂食。每天可以根据设置的数据进行精准喂食,成本相对较低的宠物喂食装置。该装置使用步进电机控制投食仓门的开闭,通过压力传感器和时钟系统控制每日的投喂量和投喂时间。每次投食后蜂鸣器会提醒宠物进食,树立每日定点进食的习惯。经测试得出,该设备确实能实现每日定时定量投喂。系统整体运行顺畅,所有预期功能得以实现。它非常适合解决宠物主人不在家时影响宠物

嵌入式阿齐Archie 2万+

⭐️【2024年新版教程】vmware tools安装步骤(Windows、Linux、MacOS版本)

VMware Tools是VMware提供的一套实用工具,它可以增强虚拟机与宿主机之间的交互性能,如改进显示性能、优化鼠标和键盘性能、提供时间同步功能等。无论是在Windows、Linux还是MacOS虚拟机上,安装VMware Tools都可以提高虚拟机的使用体验。以上就是在不同操作系统上安装VMware Tools的步骤,希望对您有所帮助。

Python老吕的博客 6万+

Java使用递归和回溯算法解决八皇后问题

概述 八皇后问题:有一个8 * 8的国际象棋棋盘,有8个皇后棋子,需要将8个皇后放置在棋盘上,并满足不出现两个皇后出现在同一行、同一列、同一斜线上,有多少种摆放方式。 解决思路:与Java使用递归和回溯算法走出迷宫同样的解题思路,就是不断的通过递归来一步步的试错,当出现无法进行的情况时,发生回溯操作,直到满足条件。 demo实现 package com.leolee.dataStructure.recursion; /** * @ClassName EightQueenProblem * @

保暖透气大裤衩LeoLee的博客 327

多维时空数据介绍(4)多维栅格数据构建

上图中包含了经度、纬度和时间三个维度,其变量为经度、纬度、时间以及降雨量,对应的变量单位为东经多少度、北纬多少度、阳历1895-1-1日开始多少天以及每年降雨多少毫升,其中经度数值4个、纬度数值3个、时间数值2个都是一维的数据,而降雨量是一个包含经度、纬度、时间的三维数组,数值有4*3*2=24个。在GeoScene 中NetCDF数据可以用做多种多维时空数据的数据源,进行创建、可视化和分析,它可以是多维栅格数据、时空立方体,还可以是体元图层,区别在于其所要表示的内容和目的。变量又分为坐标变量和属性变量。

你好,我是小张同学! 1286

八皇后问题之递归法求解

我在上一篇博文【百度之星】变态的比赛规则中采用递归法解决了一个关于整数划分的问题,这里,再次使用递归法解决一个古老而有趣的问题——八皇后问题。         八皇后问题是十九世纪著名的数学家高斯于1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案,1854年在柏林的象棋杂志上不同的

Jocodeoe的专栏 2235

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

8皇后问题(使用数组&递归)

8皇后问题 分析:在88的格子中放置8个皇后。皇后和皇后横,竖,斜都不能相遇 88的格子放置皇后,且不能相遇。相当于一行只放一个皇后,每行皇后放在不同的列(下标)。 假设把第一个皇后放在0下标的位置。 继续在第二行下标(0~7)的位置放置第二个皇后,并判断是否会和前面的皇后相遇, 相遇则放在下标+1的位置,继续判断,相遇下标+1,直至不相遇。 继续在第三行放置第三个皇后,判断是否会和前面的皇后相遇...

Shaper_p的博客 475

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

8皇后问题代码实现

如你所知,八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出。

2501_92927469的博客 278

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

八皇后问题求解java(回溯算法)

八皇后问题 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 代码实现 static int count = 0;//记录有几种方法 int max = 8;//max表示几个皇后 int[] arr = new int[max];//用一个数组表示,其中arr[n]表示放在第arr[n]+1列,n表示第n+1个皇...

Unknowncheats的博客 151

用递归和回溯法实现八皇后问题

用递归和回溯法实现八皇后问题 问题描述:   八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋棋盘上放置八个皇后,使得任意两个皇后不能互相攻击,即任何行、列或对角线(与水平轴夹角为45°或135°的斜线)上不得有两个或两个以上的皇后。对于这个问题数学家高...

weixin_33736832的博客 86
上一篇: spark解析压缩包数据,写入到hive表中
下一篇: 链表的相关操作-数据结构与算法(北航991数据结构)
dbbigdata
博客等级 码龄7年 8粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值