用回搠法解决八皇后问题的Java实现

八皇后问题(JAVA) 八皇后问题的个人思路,内附Java代码,欢迎大家批评指正,一起交流~ 阅读详情

八皇后问题是数据结构的基础问题,解决的是在一个8*8的棋盘上放8个国际象棋中的皇后,并保证8个皇后不能被其他皇后吃掉。根据国际象棋的规则,皇后可以吃同一列、同一行或同一列的棋子。

回搠是数据结构的基本思想,当一个问题遇到一个岔路口,不知道哪条路正确时,我们可以试着走其中一条路,如果这条路不能走,就回到原来的岔路口试另一条路。

在解决八皇后这个特定问题时,我们可以一行一行放入皇后。需要注意的地方是,我们看待棋盘的视角是8*8的格子,而皇后看待棋盘的视角是行,列和对角线,所以如果把棋盘看成8行、8列、15个左对角线和15个右对角线会方便一些。


八皇后问题非常典型,以至于可以成为大家公认的计量工作量的单位。比如在敏捷开发中,编写一个程序解决八皇后问题可以成为sprint计划会议上的一个故事点,以此为基础大家估计其他故事需要的故事点数。


Java实现的八皇后代码:
/**
 * @author cuiods
 */
public class EightQueue {
    private int size;
    private int[] position;
    private boolean[] columnAvailable;
    private boolean[] leftDialogAvailable;
    private boolean[] rightDialogAvailable;

    public EightQueue(int size) {
        assert size > 3;
        this.size = size;
        position = new int[size];
        columnAvailable = new boolean[size];
        leftDialogAvailable = new boolean[size * 2 - 1];
        rightDialogAvailable = new boolean[size * 2 - 1];
        for (int i = 0; i < size; i++) {
            position[i] = -1;
            columnAvailable[i] = true;
        }
        for (int i = 0; i < 2*size-1; i++) {
            leftDialogAvailable[i] = true;
            rightDialogAvailable[i] = true;
        }
    }

    public void putQueue() {
        putQueue(0);
    }

    private void putQueue(int row) {
        for (int col = 0; col < size; col++) {
            if (columnAvailable[col] && leftDialogAvailable[col+row] && rightDialogAvailable[row-col+size-1]) {
                position[row] = col;
                columnAvailable[col] = false;
                leftDialogAvailable[col+row] = false;
                rightDialogAvailable[row-col+size-1] = false;
                if (row != size-1) {
                    putQueue(row+1);
                } else {
                    printChessBoard();
                }
                position[row] = -1;
                columnAvailable[col] = true;
                leftDialogAvailable[col+row] = true;
                rightDialogAvailable[row-col+size-1] = true;
            }
        }
    }

    private void printChessBoard() {
        System.out.println("-----------------------------");
        for (int i = 0; i < size; i++) {
            for (int j = 0; j < size; j++) {
                if (position[i]==j)
                    System.out.print("x ");
                else
                    System.out.print(". ");
            }
            System.out.println();
        }
    }
}
运行截图:


详解八皇后问题(java解决方法) 最近在上java课遇到了一个八皇后的问题,在博客上搜索八皇后问题发现java版的代码很少,同时解释的也很少,这里将详细解释思路与代码,核心思路为迭代,本文章是给新手看的,大佬可以直接跳过,新手看不懂的话算我输。 首先是问题描述。 思路: 我们的思路是程序要包含三个方法:1.主方法 2.判断方法1 3.判断方法2 4.输出方法 首先说判断方法2,判断方法2的作用是判断该位置的皇后是否合法... 阅读详情

相关推荐

Java实现八皇后问题

快速理解八皇后问题!

Rinki123456的博客 1万+

八皇后问题Java

从一维数组和二维数组两个角度解读八皇后问题

dujiu777的博客 1808

回溯算法解决八皇后问题思路详解(java实现

回溯算法解决八皇后问题思路详解(java实现) 回溯算法框架 回溯算法所做的事情就是进行穷举。 解决一个回溯问题,实际上就是一个决策树的遍历过程。 只需要考虑以下三个问题: 1、路径:也就是已经做出的选择。 2、选择列表:也就是你当前可以做的选择。 3、结束条件:也就是到达决策树底层,无法再做选择的条件。 result = [] def backtrack(路径, 选择列表): if 满足结束条件: result.add(路径) return for 选择

qq_44404493的博客 793

Java解决八皇后问题

Java解决八皇后

helloworld0415的博客 4328

告别玄学调参:手把手教你用20元件模型搞定GaN HEMT高频仿真(附S参数提取避坑指南)

本文详细介绍了如何使用20元件模型优化GaN HEMT高频仿真,解决传统16元件模型在10GHz以上频段的误差问题。通过S参数提取避坑指南和实战案例,帮助工程师精准建模分布式电极效应和寄生反馈路径,提升射频电路设计效率。

weixin_42523693的博客 443

InfiniteTalk (Wan2.1) 数字人 A800 落地实战:从依赖地狱到完美运行的保姆级指南

摘要:本文详细记录了在A800(80GB)服务器上部署InfiniteTalk开源数字人项目的完整流程。该项目基于阿里Wan2.1视频生成模型,支持无限时长流式生成,但环境配置极其复杂。作者总结了18个关键问题点,包括Python版本冲突、CUDA算子缺失等,并提供了黄金配置方案:使用Python3.10+PyTorch2.5.1环境,精准控制FlashAttention等核心库版本,以及针对A800的显存优化策略。最终实现480P视频30秒/步的生成速度,相比默认配置提升3.7倍性能。

软件工程师文艺 2043

八皇后问题(经典回溯算法 JAVA版)

八皇后问题

can_meng_yun的博客 3098

自动驾驶仿真(六)—— SIL软件在环仿真测试

自动驾驶仿真六—— SIL软件在环仿真测试1. 在环仿真测试2. SIL软件在环仿真测试2.1 模型配置参数2.2 S function生成实现2.3 结果对比3. 参考学习的书目教材 博主前面的博文已经简要介绍了Carsim、Prescan 与 Simulink 在 “V”型开发流程的一些应用,现今成熟的汽车控制系统软件都是以(Model Based Design,MBD)来开发,它以图形化的方式表达复杂的逻辑、代码可读性、可移植性、开发调试便利程度都大大增强,同时利用成熟的代码生成工具链,也避免了手工代

zhudj08的博客 8655

java编程题——八皇后问题

分别运用一维数组和二维数组,通过递归的方法解决八皇后问题

sdg_advance的博客 1358

Meta DINOv3实战指南:如何用7B参数ViT模型搞定图像分割与检测(附Hugging Face配置)

本文提供了Meta DINOv3模型的实战应用指南,重点介绍了如何利用这个7B参数的视觉Transformer模型进行图像分割与目标检测。通过详细的Hugging Face配置步骤、环境搭建、模型加载与推理优化,帮助开发者快速上手这一强大的自监督视觉模型,并高效应用于实际计算机视觉任务中。

s3t4u的博客 907

Open3D 计算点云法向量的夹角【2026最新版】

计算法向量的夹角,博客长期更新,本文最新更新时间为:2026年3月7日。

点云侠的博客 3131

Java编程思想—八皇后问题(数组法、堆栈法)

Java编程思想—八皇后问题(数组法、堆栈法)实验题目:回溯法实验(八皇后问题)实验目的:实验要求:实验内容:(1)问题描述(2)实验步骤:数组法:堆栈法:算法伪代码:实验结果:实验代码:出现的问题:问题一:条件检查问题二:数组法 跳出循环情况分析实验心得: 实验题目:回溯法实验(八皇后问题) 实验目的: (1) 掌握回溯法求解问题的思想 (2) 学会利用其原理求解相关问题 实验要求: 使用贪心...

Comet_sgf的程序员之路 777

第5.2章 【自动驾驶行业融合定位核心】:手把手详解ESKF(误差卡尔曼滤波)理论公式及代码

自动驾驶定位中的ESKF(误差卡尔曼滤波)技术是解决IMU累积误差的关键,通过分离名义状态与误差状态实现高精度定位。其核心步骤包括:1)名义状态递推(位置/速度/姿态的基础物理计算);2)误差传播建模(雅可比矩阵F量化误差影响);3)协方差更新(评估定位不确定性)。ESKF在GNSS信号丢失(如隧道场景)、无卫星定位(地下车库)等场景发挥重要作用,通过融合多传感器数据维持定位精度。工程实现需解决零偏校准、协方差投影等关键问题,噪声参数需通过数据标定而非随意设置。掌握ESKF原理与实现是自动驾驶定位工程师的核

行知SLAM 706

回溯算法解决八皇后问题(JAVA实现)

送给程序猿们一句话 《拥有水滴石穿的坚持;懂得聚沙成塔的积累;磨练坚韧不拔的意志;学习脚踏实地的奋斗;提升立世做人的技巧;突破自我设限的障碍。》 文章目录背景问题解决思路什么是回溯算法算法详解我们怎么判断是否满足规则代码总结 背景 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击...

程序员大航子 4637

Sigrity System Explorer Transient Analysis模式进行瞬态仿真分析操作指导-差分信号

Sigrity System Explorer Transient Analysis模式可以用于瞬态仿真分析,通过搭建简易拓扑用于前仿真分析通道的时域性能,下面搭建一个简易的差分拓扑进行说明,以下图为例,准备好发送接收端的IBIS模型, (ibis_se.ibs,本例发送接收端都使用相同的IBIS模型),以及传输线的S参数模型(welement_se.sp)最上方的图形界面是传输线的模型,本例是一个上下都有参考平面的带状线,右侧的梯形是蚀刻角度,根据W1和W2以及铜厚来确定。

weixin_54787054的博客 440

Transformer时间序列预测-多变量输入-单变量输出+多变量输出,完整代码数据,可直接运行

Transformer时间序列预测-多变量输入-单变量输出+多变量输出,完整代码数据,可直接运行

9794

递归解决八皇后问题(java版)

java程序解决八皇后问题

m0_62429888的博客 2666

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

使用java解决八皇后问题

八皇后问题是国际象棋上的一个经典问题,要求在 (8 \times 8) 的棋盘上摆放 8 个皇后,使得它们不能互相攻击。根据国际象棋规则,皇后可以沿着。移动,因此问题的核心是如何保证每个皇后都不会在这些方向上攻击到其他皇后。以下是 Java 语言实现的。

qq_45729306的博客 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Java递归回溯思想解决八皇后问题

一、八皇后问题介绍及算法思路分析: 1.八皇后问题,是一个古老而著名的问题,是递归回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出在8*8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列、或同一斜线上,问有多少中摆法。 2.八皇后问题算法思路: (1)第一个皇后放在第一行第一列 (2)第二个皇后放在第二行第一列,然后判断是否OK,如果不OK,继续放在这行的第二列、第三列、依次把所有的列都放完,找到一个合适的位置 (3)继续第三个皇后,还是第一列、

mfx7700429的博客 1755

回溯法解决八皇后问题Java实现

回溯法解决八皇后问题Java实现 1. 问题描述 在8x8的棋盘上摆放八个皇后,使其不能互相攻击,即任意两个皇后不能处于同一行,同一列,同一斜线上,问有多少种摆法? 2. 思路分析 从第一个皇后开始,放置在第一行第一列 第二个皇后放置在第二行第一列,开始判断是否冲突,若位置冲突则挪到第二行的第二列,直到放置在该行合适的位置 第三个皇后开始在第三行放置,以此类推,若第x行每个位置都不合适,则回退到其上一行(即前一行已经放置的位置不合理,重新放置一个位置) 直到最后一个皇后放置完成,得到一个正解 3. 代码

m0_48372408的博客 365

Java解决八皇后问题(递归)

要求在 8 × 8 的棋盘上摆放8个皇后,使”皇后“们不能互相攻击 ,当任意两个皇后都不处于同一行、同一列或同一条斜线上时就不会相互攻击,即为目标解。

m0_62819329的博客 1341

八皇后问题—Java—递归回溯

八皇后问题(回溯算法) 一、问题介绍: 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是由国际西洋棋手马克斯 • 贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后不能处于同一行、同一列或同一斜线上,问有多少种摆法。通过计算可以得出共有92种摆法,下面我们就对这个问题进行解决。 八皇后小游戏链接:大家可以通过这个游戏理解八皇后问题 二、问题分析 1、问题重述 通过问题的介绍,我们可以获取一些信息,即:任意两个皇后不能处于同一行、同一列或同一斜

qq_45629699的博客 7939

用递归思想和回溯算法解决八皇后问题(java实现)

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

Hello什么来着? 1236
上一篇: 解迷宫问题的Java实现
下一篇: 语言(Language)和语法(Syntax)简述
cuiods
博客等级 码龄12年 41粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值