数据结构--递归之八皇后问题(java版)

Java实现递归回溯,解决八皇后问题,数据结构与算法 ④当得到一个正确解时,在栈回退到上一个栈时,就会开始回溯,即将第一个皇后,放到第一列的所有正确解,全部得到。//下标为第几个(即第几行),值为第几列。System.out.printf(“一共判断了%d次”,judgeCount);if (n == max){ //n为8相当于是第九个皇后了,说明已经全部放好了。//用来第n个皇后判断与前面的所有皇后是否冲突。if (judge(n)){ //不冲突。//用来放置第n个皇后。 阅读详情

数据结构–递归之八皇后问题(java版)

问题表述为:
在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。
我们可以通过以下程序自己验证到底有多少种解法

package com.mxf;

public class Queue8 {
    //定义一个max表示共有多少个皇后
    private final int MAX = 8;
    private int count = 0;
    //定义数组表示,皇后放置位置的结果
    int[] array = new int[MAX];
    public static void main(String[] args) {
        Queue8 q = new Queue8();
        q.check(0);
        System.out.println("解法共有:"+q.getCount()+"种");
    }

    //编写一个方法,放置第n个皇后
    //特别注意:check是每一次递归时,进入到check中都有for(int i = 0; i < MAX; i++),因此会有回溯
    private void check(int n) {
        if(n == MAX) {//n=8,其实前八个皇后就已经放置完毕
            print();
            count++;
            return;
        }
        //依次放入皇后,并判断是否冲突
        for (int i = 0; i < MAX; i++) {
            //先把当前这个皇后n,放到改行的第1列
            array[n] = i;
            //判断当前放置是否合理
            if(judge(n)) { //不冲突
                //接着放第n+1个皇后,即开始递归
                check(n+1);
            }

            //如果冲突,就继续执行array[n] = i; 即将第n个皇后放置在本行的后移的一个位置
        }
    }

    //判断当前放置的第n个皇后,是否和已经摆放的n-1个皇后位置冲突
    private boolean judge(int n) {
        for (int i = 0; i < n; i++) {
            if(array[i] == array[n] || Math.abs(n-i) == Math.abs(array[i]-array[n])) {
                return false;
            }
        }
        return true;
    }

    //定义一个方法将皇后摆放位置输出
    private void print() {
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i]+" ");
        }
        System.out.println();
    }

    public int getCount() {
        return count;
    }
}

程序运行结果:

在这里插入图片描述
可见八皇后问题确实是一共有92种解法

对于程序输出的解法是否正确,可以通过一个小游戏自行进行验证,链接:http://www.4399.com/flash/42643_1.htm

java八皇后递归算法 不是很好的一个java八皇后算法!! 不过觉对是真的哦 立即下载

相关推荐

FPGA以太网接口设计避坑指南:GMII与RGMII时序转换的三种实现方案对比

本文深入解析FPGA以太网接口设计中GMII与RGMII时序转换的三种实现方案,包括Xilinx官方IP核、手工原语逻辑和开源方案gmii_to_rgmii。通过对比分析各方案的优缺点和适用场景,为工程师提供技术选型指南,帮助避免常见设计陷阱,提升高速网络设备开发的效率和可靠性。

weixin_42570484的博客 378

八皇后问题java实现

八皇后问题 问题描述 时间退回到1848年,国际西洋棋棋手马克斯·贝瑟尔提出了这样的一个问题: 在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 后面陆续有不同的学者提出自己的见解。大数学家高斯认为一共有76种摆法,1854年在柏林的象棋杂志上不同的作者发表了共计40种不同的见解,后来还有人利用图论的方法得出共有92种摆法.。 在数据结构与算法中,八皇后问题是一个经典使用回溯思想解决问题的案例。 回溯思路 我们发现在一个8*8的

qq_44789195的博客 1398

ELK - CentOS7 安装 elasticsearch 7.17.5

elk elasticsearch 安装

qq_19783793的博客 1461

递归求解八皇后问题

题目: 八皇后问题 在8*8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法 递归思路:在第1行安全位置放一个棋子,在第2行安全位置放一个棋子,以此类推,直到八行都放了棋子,第9行时退出递归过程。 C++代码: //八皇后问题 //在8*8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法 //思路:在第1行安全位置放一个棋子,在第2行安全位置放一个棋子,以此类推,直到八行都放了棋子

wulila的博客 410

基于STM32智能教室灯光照明人数监测系统

本文设计了一套基于STM32和物联网技术的智能教室照明系统,通过光照传感器和双红外对管实现精准人数统计,结合"光照+人数"双条件判断实现按需照明。系统采用"感知-决策-执行-云联"架构,包含环境感知、人数统计、控制执行等模块,支持本地自动控制和手机APP远程管理。测试表明系统能有效避免"长明灯"现象,具有节能降耗、管理智能化的特点。创新点在于双向人数统计算法和双条件控制逻辑,为智慧校园建设提供了实用解决方案。

1158

查看电脑mac地址+主机名+用户名并导出

张三:李四,应公司要求,今天下班前必须将这张表格里面用户电脑的mac地址统计出来!李四:我该怎么办呢?一个一个查看,太没有效率了吧!对了,我可以做一个bat脚本啊!

拥抱着青春 1969

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

递归-八皇后问题(回溯算法) 1.概述: ​ 在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列 或同一斜线上,问有多少种摆法。 2.示意图 上图为八皇后问题的其中一种解法 3.步骤: 1.第一个皇后先放第一行第一列 ​ 2.第二个皇后放在第二行第一列,然后判断是否成立,如果不成立,继续放在第二列、第三列、第四… ​ 依次把所有的的列放完,直到找到一个满足的解 ​ 3.继续放第三、第四…个皇后,直到所有的皇后全部放在了不冲突的位置,得到了一个正确的

Adorenine9的博客 710

语言大模型之Tokenization的深入理解

Tokenization(分词)是自然语言处理(NLP)中一个非常重要的步骤,它的目标是将文本转换为模型可以理解的格式。对于像GPT、BERT等大型预训练模型来说,tokenization决定了文本如何转化为数字表示,从而影响模型在不同任务中的表现。接下来我会深入介绍tokenization的过程、不同的tokenization方法,以及它与模型微调(fine-tuning)之间的关系。

JustinMars的博客 339

八皇后问题与详细注解

public class EightQueen{ int max = 8; int[] a = new int[8];//用一个数组即可,a[8] = {0, 4, 7, 5, 2, 6, 1, 3},表示第一个皇后放在第一行第一列,第二个皇后放在第二行第5列 //下标i表示第i+1行,即第i+1个皇后,a[i]=val,val表示第i+1个皇后,放在val+1列 static int sum = 0; //记录一共有多少种解法 static int ju

weixin_46497503的博客 317

54、生物神经网络建模全解析

本文系统解析了生物神经网络的建模方法,涵盖从单个神经元到神经网络的多个时空尺度。首先介绍神经元层面的生物物理模型(如霍奇金-赫胥黎模型和多隔室模型)与多种简化模型(如菲茨休-纳古莫、莫里斯-勒卡尔、积分发放模型等),并分析其适用场景。随后探讨突触层面的信号传递机制,对比电突触与化学突触在结构、传输速度和方向上的差异,阐述其在神经网络建模中的理论意义。文章旨在为理解神经系统的信息处理机制、构建受生物启发的人工智能模型提供理论基础。

app77的博客 76

最小二乘(MLS)求点云法向量

MLS算法的基本思想是通过在点云的局部邻域内拟合一个光滑曲面,如平面或多项式曲面,以此来重建和处理点云数据。对于法向量估计,MLS通常在每个点的邻域内拟合局部平面,然后从该平面的法向量作为点的法向量。

twnkie的博客 744

回顾数据结构(Java版)——递归解决八皇后问题

八皇后是一道十分经典的数据结构与算法的题目,八皇后题目的核心思想就在一个8*8的棋盘中,每行摆放一个皇后,并且每个皇后不能同行或者同列甚至斜着偷瞄一眼也不行,下来就使用递归来解决八皇后问题 使用递归来解决八皇后十分的简单,递归会不断的前进和回退,从而找出所有的解。 实现步骤: 使用一个数组queen来代表这个棋盘,为什么可以用一个一维数组来代表二维数组呢?很简单,因为每一行或者每一列只能放置...

qq_42605968的博客 278

扣子(Coze)搭建智能体完整实战指南 —— 从零基础入门到写小说及其他需求扩展开发

随着大语言模型进入应用爆发期,我们正在经历从“寻找提示词”向“构建智能体”的范式转移。扣子(Coze)作为字节跳动推出的一站式AI智能体开发与运营平台,极大地降低了AI应用开发的门槛,让非技术人员也能快速搭建具备感知、决策、行动能力的智能体。 本文将手把手带你从零开始,在扣子平台上搭建一个功能完备的**小说创作智能体**,并基于此展示如何将同一套架构扩展到其他需求场景。无论你是写作爱好者、内容创作者,还是希望用AI赋能日常工作的职场人士,这套完整的技术方案都将帮助你快速上手。

huanghm88的专栏 635

Java数据结构-八皇后问题

本系列博客中,主要是对常用的数据结构进行讲解,本篇博客主要讲解的是逆波兰计算器的完整版的实现.因为逆波兰计算机涉及到的概念和转换较多,本篇博客会较以前更长,旨在更好的服务读者! 传统技能:应用场景-->代码思路-->具体做法-->代码实现-->代码分析-->总结 在应用场景后,我会详细说明什么是逆波兰表达式,波兰表达式,转换规则等 ———————————————— 版权声明:本文为优快云博主「JOElib」的原创文章,遵循CC 4.0...

算法萌新一枚 2783

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

从1开始学Java数据结构与算法——递归解决迷宫回溯问题和八皇后问题

从1开始学Java数据结构与算法——递归解决迷宫回溯问题和八皇后问题递归介绍与分析案例引入递归机制:递归能解决的问题和规则迷宫回溯问题迷宫回溯问题分析迷宫回溯问题代码实现八皇后问题八皇后问题分析八皇后问题代码实现 递归介绍与分析 案例引入 现在有如下问题,下图是一个很简单的界面,红色区域表示墙,蓝色圆圈表示起始位置,蓝色三角形表示终点位置。那么我们用代码去解决这个问题的话,肯定不能将所有可能的路径...

weixin_43851232的博客 834

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

数据结构解决八皇后问题(java版)

这个程序的回溯法巧妙在:每一行中可能有n列是符合条件的,但是如果最终的皇后数不到8的话,我们需要回溯,执行pollLast语句,然后继续之前栈空间的for循环,然后依次类推。构造了Location类对链表进行操作,在该类中有棋子的x和y坐标的属性,并重写了toString(该方法在testArea中打印一个合适的被放置的棋子的具体位置)。回溯法解决八皇后问题的过程中,并不需要记录整棵“搜索树”,而只需记录从初始状态到当前状态的一条搜索路径,是“线性链状”的,其最大优点是占用空间少。

m0_54570435的博客 423

算法与数据结构——递归算法+回溯算法——八皇后问题

祝你开心,快乐,不会想起我!

IT小辉同学 1502

Java学习——数据结构——递归实现八皇后问题

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站 八皇后问题介绍 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848 年提出:在 8×8 格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 八皇后问题算法思路分析 (1) 第一个皇后先放第一行第一列 (2) 第二个皇后放在第二行第一列、然后判断是否 OK, 如果不 OK,继续放在第二列、第三列、依次把所有列都放完,找到一个合适

qq_41853002的博客 331

Java数据结构与算法_04 递归(八皇后问题、迷宫问题)

Java数据结构与算法_04递归迷宫问题完整代码八皇后问题完整代码 本人是个新手,写下博客用于自我复习、自我总结。 如有错误之处,请各位大佬指出。 学习资料来源于:尚硅谷 递归 递归就是方法自己调用自己。 递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。 比如: //阶乘 public static int factorial(int n) { if (n == 1) { ...

一个努力学习的程序猿 414

【递归与回溯算法】汉诺塔与八皇后问题详解

本文对递归与回溯算法的常见应用题:汉诺塔问题与八皇后问题进行了详细的讲解,并用代码实现验证。

黄小黄的博客 3674

《八皇后问题》Java数据结构-JavaProject-JavaOJ题集

对八皇后的深度讲解,图解超详细,解决力扣51题N皇后问题

Carefree_State的博客 798

数据结构和算法(十一)递归-八皇后问题

1. 数据结构和算法(十一)递归-八皇后问题 1.1 八皇后问题 在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问一共有多少种摆法。大数学家高斯认为一共有76种摆法,1854年在柏林的象棋杂志上不同的作者发表了共计40种不同的见解,后来还有人利用图论的方法得出共有92种摆法。 如何解决八皇后问题? 使用递归回溯法,这种方法从棋盘的第一行开始尝试摆放第一个皇后,摆放成功后,递归一层,再遵循规则在棋盘第二行来摆放第二个皇后。如果当前位置无法摆放,

yuan_xw的专栏 526

Java实现八皇后问题、迷宫问题 及 递归详解

目录概述递归的作用迷宫问题代码实现八皇后问题代码实现 概述 递归是方法本身调用自己的一种算法。 由于java在调用方法时会在栈中开辟一个新的空间,所以递归一定要确定一个终止条件,且在不断递归的过程中,不断向这个条件靠近,否则会栈溢出。 也就是这个原因,有人说递归性能不好,内存占用大。 程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小

博客 543

【数据结构】递归---八皇后问题

文章目录1. 八皇后问题2. 八皇后问题分析3. 代码实现4. 结果分析 1. 八皇后问题 2. 八皇后问题分析 3. 代码实现 public class Queue8 { //定义一个max,表示共有对少个皇后 int max = 8; //定义数组array,保存皇后放置位置的结果 int[] arr = new int[max]; static i...

JH灰色的博客 341

Java数据结构实现之递归和相关递归题目

八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能外干同一行、同一列或同一斜线上,问有多少神摆法。

qq_64580912的博客 1455
上一篇: 数据结构--线索化二叉树学习案例(java版)
下一篇: pom.xml文件无法下载jar包和expected START_TAG or END_TAG not TEXT (position: TEXT seen ...<dependency>错误分析解决
JavaWizard-M
博客等级 码龄6年 3159粉丝 148原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值