Java解八皇后问题——非迭代

java-八皇后问题 java-8皇后问题 阅读详情

这两天重新做一遍,结果是92个。现在把结果贴出来,请大家指正。

 

辅助类:piece.java

package hello;


public class Piece {
private int x;
private int y;

public Piece() {
super();
}
public Piece(int x, int y) {
super();
this.x = x;
this.y = y;
}

public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}

}

主类Application.java:

//Autored by Textfire
package hello;


import java.util.ArrayList;


//@SpringBootApplication
public class Application {


public static void main(String[] args) throws Exception {
// SpringApplication.run(Application.class, args);
ArrayList<Piece> piece = new ArrayList<Piece>();
int total = 0;
StringBuffer sb = new StringBuffer();




for (int i = 0; i < 8; i++) { 
for (int j = 0; j < 8; j++) { 
if (piece.size() == 0) {
Piece p = new Piece(i, j);
piece.add(p);
break;
} else {
while ((j == 7) && (!check(piece, i, j))) {
if (i == 0)
break; 
if (piece.get(piece.size() - 1).getY() == 7) {
if(i==1)
break; //the outlet of end.
j = piece.get(piece.size() - 2).getY() + 1;
i = i - 2;
piece.remove(piece.size() - 1);
piece.remove(piece.size() - 1);
} else {
j = piece.get(piece.size() - 1).getY() + 1;
i--;
piece.remove(piece.size() - 1);
}
}


if (check(piece, i, j)) {
Piece p = new Piece(i, j);
piece.add(p);
if (piece.size() < 8) {
break;
} else {
for (Piece q : piece) {
sb.append("\t").append(q.getY());
}
total++;
System.out.println("\t  Number " + total +" : "+ sb);
sb.delete(0, sb.capacity());
if (piece.get(piece.size() - 1).getY() == 7) {
j = piece.get(piece.size() - 2).getY();
i = i - 1;
piece.remove(piece.size() - 1);
piece.remove(piece.size() - 1);
} else {
j = piece.get(piece.size() - 1).getY();
piece.remove(piece.size() - 1);
}
}
}
/*if (total > 91) {
System.out.println();
for (Piece q : piece) {
System.out.println("Row  " + q.getX() + "\t"
+ q.getY() + " \t i= " + i + "    j=  " + j
+ "       size=" + piece.size());
Thread.sleep(200);
}
}*/
}
}
}
System.out.println("Normal end.");
}


public static boolean check(ArrayList<Piece> piece, int m, int n) {

for (int i = 0; i < piece.size(); i++) {
if ((piece.get(i).getY() == n)
|| (Math.abs(piece.get(i).getY() - n) == Math.abs(piece
.get(i).getX() - m))) {
return false;
}
}
return true;
}


public int fib(int index) {
if (index == 1 || index == 2) {
return 1;
} else {
return fib(index - 1) + fib(index - 2);
}
}


}

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

相关推荐

回溯算法实战:C++/Python 3种实现对比,八皇后问题92解效率分析

本文深入探讨了回溯算法在解决八皇后问题中的三种实现方式(C++二维数组、C++一维数组优化、Python简洁版),并进行了详细的性能对比分析。通过优化冲突检测和数据结构选择,显著提升了算法效率,特别适合算法教学和竞赛应用。

weixin_33767813的博客 521

Java解决八皇后问题及利用回溯法的动态搜索路径的GUI展示[含详细解析]

Java利用回溯法结合递归操作解决八皇后问题;利用WindowBuilder的GUI,动态展示该问题背景下回溯法的搜索路径[含详细解析]

记录个人在工作学习中的思考和遇到的问题。 2897

遗传算法应用实战:解决八皇后问题

八皇后问题要求在一个8×8的国际象棋棋盘上放置八个皇后,使得它们不能相互攻击。在数学上,这可以表示为一个8×8的矩阵,其中每一行、每一列和两个主对角线上的元素只能出现一次数字1,其余为0。数字1的位置表示皇后的放置位置,而0表示空位置。为了将这个问题转化为遗传算法能够处理的格式,我们可以定义一个长度为64的数组,这个数组的每一个元素对应棋盘上的一个位置,每个元素可以取0或1,0表示该位置无皇后,1表示该位置有皇后。适应度函数是评估个体适应环境的能力的标准,它直接决定了个体被选中繁衍后代的概率。

weixin_42584758的博客 710

八皇后问题Java

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

dujiu777的博客 1808

Proteus快速入门(最详细教程)

Proteus 是一款用于嵌入式单片机仿真的软件,用于在打PCB板之前对软件程序和硬件电路的正确性进行仿真验证。1.所以Proteus一般会和Keil软件进行联合仿真,在Proteus中绘制系统的电路图,在Keil软件中编写对应的程序后生成Hex文件。2.Proteus的仿真结果仅供参考,只能在一定程度上验证系统的可能性。实际实物系统还需要进行进一步的调试。以上即为本次分享的Proteus入门教程的全部内容,希望可以能够帮助到各位道友。

ediykk的博客 15万+

从硬件拆解到图像生成:一次搞懂MRI设备(主磁体、梯度线圈、射频系统)是如何协同工作的

本文深入解析MRI设备的三大核心系统——主磁体、梯度线圈和射频系统如何协同工作,实现从量子现象到诊断图像的转化。通过详细的技术参数和临床案例,揭示磁共振成像(MRI)在医疗图像处理中的精密工程原理和最新技术突破,帮助读者全面理解这一现代医学影像技术的运作机制。

weixin_33734785的博客 549

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

八皇后问题

can_meng_yun的博客 3098

转录组数据去批次方法整理(combat,combat-seq,removeBatchEffect)

正是因为这些非生物学的因素存在就有可能会导致我们的结果偏离真实的情况,那么实际分析的过程中研究者应当评估是否存在批次效应,并决定是否要进行去批次处理。批次效应是指样本在不同批次处理及测量的情况下引入与生物学情况不相关的技术误差,比如不同试剂耗材,不同操作者,不同的实验时间等。combat函数是基于贝叶斯框架下的调整数据批次效应的函数,主要适用于已经被过滤和标准化后的数据(combat-seq函数是基于二项回归分布下的调整数据批次效应的函数,主要适用于。值得注意的是,即使使用了所谓的去批次效应的工具,

zfyyzhys的博客 7862

八皇后问题的java解决方式

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录一、八皇后问题二、代码 一、八皇后问题 8*8的棋盘中,每一行放置一个皇后,从第一行第一列开始放置皇后,每一个皇后不能存在于同一行同一列和同一斜线上,问有几种放置方法 我们的解题思路为` 1.现将皇后放置在第一行第一列 2.如果符合规则,就利用递归,判断下一行皇后的位置 3.一旦遇到不符合规则的位置则皇后向右移动一位 4.最终一旦皇后在某一行找到一个合适位置且无法向下一行继续移动,就回溯到上一行并向右移动一位继续判断 5.每在

wenwenaier的博客 810

FOC实战笔记:RC吸收电路的设计考量与参数调优

本文深入探讨了FOC驱动器中RC吸收电路的设计与调优。针对MOS管开关过程中的电压尖峰问题,详细阐述了RC电路的钳位与能量吸收原理,并提供了从参数计算、实验调试到布局布线的完整实战指南,旨在帮助工程师有效提升系统可靠性与稳定性。

weixin_29219539的博客 273

消费级显卡跑大模型:RTX 3060 12G 部署 70 亿参数 AI 编程助手的优化实战

本文详细介绍了如何在消费级显卡RTX 3060 12G上,通过量化、投机解码和分页KV-Cache等核心优化技术,成功部署并流畅运行70亿参数的CodeLlama-7B编程助手。文章提供了从环境配置、模型准备到参数调优的完整实战笔记,实测显存占用降至7.3GB,生成速度达21.7 token/秒,为开发者和技术爱好者提供了可行的本地AI部署方案。

weixin_29053067的博客 1258

Java迭代法求所有八皇后问题的解

八皇后问题,是个经典的算法问题,大学的时候曾经为它苦恼过,现在发现,其实是挺简单的,虽然不会国际象棋,当八皇后还是会解的,哈哈。。 先上代码private void t6_20() { int a = 1, b = 9, c = 17, d = 25, e = 33, f = 41, g = 49, h = 57, n = 1; for (a = 1; a < 9; a++) {

黄飞之的后花园 1515

GAMIT基线解算实战:从RINEX数据准备到精度报告解读(附2024年tables更新攻略)

本文详细解析了2024年GAMIT基线解算全流程,从RINEX数据准备到精度报告解读,特别更新了tables配置攻略。涵盖工程目录设计、数据预处理、关键配置文件更新及基线解算策略优化,帮助用户掌握高精度GNSS数据处理技术,提升解算效率和结果可靠性。

weixin_42520374的博客 305

Java数据结构-八皇后问题

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

算法萌新一枚 2783

Obsidian与RAG:知识管理的未来之战

摘要: 本文对比了传统RAG、Obsidian和llm-wiki-skill三种知识管理方案。传统RAG依赖查询时临时检索,知识无法积累;Obsidian需人工整理,成本高但结构化强;llm-wiki-skill通过AI在摄入时自动编译知识为结构化Wiki,实现持续增值。核心差异在于知识处理时机——llm-wiki-skill将"查询时检索"转变为"摄入时编译",通过三层Markdown结构(sources/concepts/entities)和自动双向链接构建可进化

ZhangJiqun&191cm&85kg 620

电动汽车远程监控与诊断软件:BMW ConnectedDrive EV远程监控二次开发_7.数据安全与隐私保护

数据加密是保护数据安全的重要手段之一。在电动汽车远程监控与诊断软件中,加密技术可以确保数据在传输过程中的安全性和完整性。常见的加密技术包括对称加密和非对称加密。

zhubeibei168的博客 884

回溯算法之八皇后问题实现Java

回溯算法之八皇后问题实现Java 1.回溯算法的简单介绍 回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。 回溯法以深度优先的方式来解决问题,每次以试探的思想去尝试,如果走不通,就回退重新作出选择去尝试。 2.典型应用场景–八皇后问题 在国际象棋中,皇后是最强大的一枚棋子,可以吃掉与其在同一行、列和斜线的敌方棋子。 也就是说,我们需要在8*8的国际象棋棋盘上摆放8个皇后,使他们既不能同一行,...

weixin_43757005的博客 408

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

java八皇后问题实验报告_[Java教程]八皇后问题

[Java教程]八皇后问题0 2016-09-11 13:00:07八皇后问题是个很经典的递归、迭代问题。解决思路就是只要保证所有皇后不在同一列和同斜线上。假设就j,k为两个皇后所在的行 x[j]、x[k]表示两个皇后的位置。当两个皇后在同一列或同斜线上 可以用数学式子来表达|j-k|=|x[j]-x[k]|、x[j]=x[k]。所有当这两个条件不满足的时候问题就能解决。解决方法一:...

weixin_42498003的博客 644

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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

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

八皇后问题的解决

八皇后问题 八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。当且仅当n = 1或n ≥ 4时问题有解。 这是栈的一个典型应用。我们先将皇后放在(0,0)点的位置,然后在第二行依次试探,依次进行,如果在某一行没有位置了,弹出前一行,将x的位置加1,再进行试探。 ...

m0_47202518的博客 566

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

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

Java数组补充内容及八皇后问题

查漏补遗 八皇后问题

qq_45879990的博客 174

java利用递归回溯思想求解八皇后问题

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

nmslqwq的博客 308

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

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

博客 543

【回溯法】八皇后问题

在一个8*8的棋盘中,有八个皇后的棋子。这些棋子所放的位置的同一行,同一列和同一个斜线上不能出现另一个皇后,问有多少种摆放的方式。

weixin_45383604的博客 370

【回溯算法的Java实现及其应用】

回溯算法是一种通过迭代地尝试各种可能的解来解决问题的方法。回溯算法通常用于搜索问题的解空间,例如八皇后问题、数独问题、全排列问题等。回溯算法的基本思想是在问题的解空间中进行深度优先搜索,当发现一个解不满足问题的约束条件时,回溯到上一个状态尝试另一种可能的解。回溯算法是一种通过迭代地尝试各种可能的解来解决问题的方法。这种算法在解决一些特定类型的问题时非常有效,例如八皇后问题、数独问题和全排列问题等。

我是Java程序员廖志伟,感谢朋友们的支持! 738

JAVA中的回溯算法解空间树,八皇后问题以及骑士游历问题超详解

设码在棋盘的某一位置(x,y)上,按照“走马日”的规则,下一步有8个方向走,如图所示。若给定起始位置(x0,y0),使用站和队列探索出一条马遍历棋盘的路径。,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上吗,问有多少种摆法。整体的思路就是不断递归下一个元素,然后从currentSubset中移除最后添加的元素,进行回溯,准备处理下一个元素。为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个。意思就是一个集合s所有的子集的集合。

2302_79993788的博客 1570
上一篇: 外键约束
下一篇: 取消窗口置顶
textfire
博客等级 码龄14年 6粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值