【Java】求解N皇后问题
代码实现:
import java.util.Scanner;public class Queen {/*** 定义皇后的位置向量*/int[] queue;/*** 定义皇后数*/int queueNum;public Queen(int queueNum) {this.queueNum = queueNum;this.queue = new int[queueNum];//根据皇后数初始化皇后位置向量for (int i = 0; i < queueNum; i++) {queue[i] = -1;}}public void getPlaceQueenSolutions() {//当前摆放的皇后,0<=k<nint k = 0;//解决方案个数int solutionNum = 0;//摆放皇后kwhile(k >= 0) {//在下一列摆放皇后kqueue[k]++;//发生冲突while(queue[k] < queueNum && place(k) == 1) {//皇后k探测下一列queue[k]++;}//得到一个解,输出if (queue[k] < queueNum && k == queueNum-1) {System.out.println("第" + ++solutionNum + "个解是:");//打印n皇后问题的一个解(queue 1, queue 2, ..., queue n)for (int i = 0; i < queueNum; i++) {System.out.print(queue[i] + 1 + " ");}System.out.println();//尚有皇后未摆放} else if (queue[k] < queueNum && k < queueNum-1) {//准备摆放下一个皇后k++;} else {//重置x[k],回溯,重新摆放皇后kqueue[k--] = -1;}}}/*** 考察皇后k在x[k]列是否发生冲突* @param k* @return*/private int place(int k) {for (int i = 0; i < k; i++) {//违反约束条件if (queue[i] == queue[k] || Math.abs(i-k) == Math.abs(queue[i]-queue[k])) {return 1;}}return 0;}public static void main(String[] args) {System.out.println("请输入皇后个数:");Scanner scanner = new Scanner(System.in);int k = Integer.parseInt(scanner.nextLine());new Queen(k).getPlaceQueenSolutions();scanner.close();}}
比如输入8,即有名的“八皇后问题”,解为92个
结果如下:
第1个解是:
1 5 8 6 3 7 2 4
第2个解是:
1 6 8 3 7 4 2 5
第3个解是:
1 7 4 6 8 2 5 3
第4个解是:
1 7 5 8 2 4 6 3
第5个解是:
2 4 6 8 3 1 7 5
第6个解是:
2 5 7 1 3 8 6 4
第7个解是:
2 5 7 4 1 8 6 3
第8个解是:
2 6 1 7 4 8 3 5
第9个解是:
2 6 8 3 1 4 7 5
第10个解是:
2 7 3 6 8 5 1 4
第11个解是:
2 7 5 8 1 4 6 3
第12个解是:
2 8 6 1 3 5 7 4
第13个解是:
3 1 7 5 8 2 4 6
第14个解是:
3 5 2 8 1 7 4 6
第15个解是:
3 5 2 8 6 4 7 1
第16个解是:
3 5 7 1 4 2 8 6
第17个解是:
3 5 8 4 1 7 2 6
第18个解是:
3 6 2 5 8 1 7 4
第19个解是:
3 6 2 7 1 4 8 5
第20个解是:
3 6 2 7 5 1 8 4
第21个解是:
3 6 4 1 8 5 7 2
第22个解是:
3 6 4 2 8 5 7 1
第23个解是:
3 6 8 1 4 7 5 2
第24个解是:
3 6 8 1 5 7 2 4
第25个解是:
3 6 8 2 4 1 7 5
第26个解是:
3 7 2 8 5 1 4 6
第27个解是:
3 7 2 8 6 4 1 5
第28个解是:
3 8 4 7 1 6 2 5
第29个解是:
4 1 5 8 2 7 3 6
第30个解是:
4 1 5 8 6 3 7 2
第31个解是:
4 2 5 8 6 1 3 7
第32个解是:
4 2 7 3 6 8 1 5
第33个解是:
4 2 7 3 6 8 5 1
第34个解是:
4 2 7 5 1 8 6 3
第35个解是:
4 2 8 5 7 1 3 6
第36个解是:
4 2 8 6 1 3 5 7
第37个解是:
4 6 1 5 2 8 3 7
第38个解是:
4 6 8 2 7 1 3 5
第39个解是:
4 6 8 3 1 7 5 2
第40个解是:
4 7 1 8 5 2 6 3
第41个解是:
4 7 3 8 2 5 1 6
第42个解是:
4 7 5 2 6 1 3 8
第43个解是:
4 7 5 3 1 6 8 2
第44个解是:
4 8 1 3 6 2 7 5
第45个解是:
4 8 1 5 7 2 6 3
第46个解是:
4 8 5 3 1 7 2 6
第47个解是:
5 1 4 6 8 2 7 3
第48个解是:
5 1 8 4 2 7 3 6
第49个解是:
5 1 8 6 3 7 2 4
第50个解是:
5 2 4 6 8 3 1 7
第51个解是:
5 2 4 7 3 8 6 1
第52个解是:
5 2 6 1 7 4 8 3
第53个解是:
5 2 8 1 4 7 3 6
第54个解是:
5 3 1 6 8 2 4 7
第55个解是:
5 3 1 7 2 8 6 4
第56个解是:
5 3 8 4 7 1 6 2
第57个解是:
5 7 1 3 8 6 4 2
第58个解是:
5 7 1 4 2 8 6 3
第59个解是:
5 7 2 4 8 1 3 6
第60个解是:
5 7 2 6 3 1 4 8
第61个解是:
5 7 2 6 3 1 8 4
第62个解是:
5 7 4 1 3 8 6 2
第63个解是:
5 8 4 1 3 6 2 7
第64个解是:
5 8 4 1 7 2 6 3
第65个解是:
6 1 5 2 8 3 7 4
第66个解是:
6 2 7 1 3 5 8 4
第67个解是:
6 2 7 1 4 8 5 3
第68个解是:
6 3 1 7 5 8 2 4
第69个解是:
6 3 1 8 4 2 7 5
第70个解是:
6 3 1 8 5 2 4 7
第71个解是:
6 3 5 7 1 4 2 8
第72个解是:
6 3 5 8 1 4 2 7
第73个解是:
6 3 7 2 4 8 1 5
第74个解是:
6 3 7 2 8 5 1 4
第75个解是:
6 3 7 4 1 8 2 5
第76个解是:
6 4 1 5 8 2 7 3
第77个解是:
6 4 2 8 5 7 1 3
第78个解是:
6 4 7 1 3 5 2 8
第79个解是:
6 4 7 1 8 2 5 3
第80个解是:
6 8 2 4 1 7 5 3
第81个解是:
7 1 3 8 6 4 2 5
第82个解是:
7 2 4 1 8 5 3 6
第83个解是:
7 2 6 3 1 4 8 5
第84个解是:
7 3 1 6 8 5 2 4
第85个解是:
7 3 8 2 5 1 6 4
第86个解是:
7 4 2 5 8 1 3 6
第87个解是:
7 4 2 8 6 1 3 5
第88个解是:
7 5 3 1 6 8 2 4
第89个解是:
8 2 4 1 7 5 3 6
第90个解是:
8 2 5 3 1 7 4 6
第91个解是:
8 3 1 6 2 5 7 4
第92个解是:
8 4 1 3 6 2 7 5
【Java】求解N皇后问题相关推荐
- 回溯法求解N皇后问题(Java实现)
回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并以此慢慢地扩大问题规模,迭代地逼近最终问题的解.这种迭代类似于穷举并且是试探性的,因为当目前的可 ...
- C语言局部搜索算法(爬山法,模拟退火法,遗传算法)求解八皇后问题
C语言局部算法求解八皇后问题 写在前面 八皇后问题及局部搜索算法 爬山法(hill-climbing searching) 算法介绍 代码实现 退火法(simulated annealing) 算法介 ...
- 数据结构学习之栈求解n皇后问题
数据结构学习之栈求解n皇后问题 0x1 目的 深入掌握栈应用的算法和设计 0x2 内容 编写一个程序exp3-8.cpp求解n皇后问题. 0x3 问题描述 即在n×n的方格棋盘上,放置n个皇后 ...
- 非递归求解N皇后问题(回溯法)
一般而言,回溯法可以说是一种穷举法,适合于求解各种深度优先搜索的问题. 回溯法是一种应用广泛的算法.其关键点是解空间树和n元组可行解的定义. 非递归回溯法程序的结构基本上是相同的,该程序的结构可以用求 ...
- Java——求解一元n次方程(V1.0)
Java--求解一元n次方程(V1.0) 主要思路 通过 接口(interface) 进行求解方法声明,通过 implements 声明自己使用的接口 通过字符串 equals() 方法以及 whil ...
- 爬山法求解八皇后问题的全部解法
爬山法求解八皇后问题的全部解法 程序的概要设计思想 初始状态 冲突函数 寻找邻居状态 寻找全部解集 程序主要函数的作用 运行结果截图 Python源代码 程序的概要设计思想 爬山算法是一种局部贪婪算法 ...
- 回溯法求解N皇后问题及其时间复杂度分析
回溯法求解N皇后问题及其时间复杂度分析 一.回溯法简介 1. 什么是回溯法? 2. 回溯法的时间复杂度分析 蒙特卡罗方法 蒙特卡罗方法在回溯法求解时间复杂度中的应用 二.回溯法求解N皇后问题 1. 回 ...
- 利用Java求解“鸡兔同笼问题”:鸡和兔在一个笼子里,共有腿100条,头40个,问鸡兔各有几只?
Java求解"鸡兔同笼问题" public class Jttl {public static void main(String[] args) {int jt = 0 ;whil ...
- 链表之反转链表,万金油的解题方法(java求解)
链表之反转链表,一招鲜吃遍天(java求解) 内容目录 链表之反转链表,一招鲜吃遍天(java求解) 解题万金油 栗子1:反转整个链表 栗子2:反转某个区间内的链表 栗子3:按照k为一组,反转某个区间 ...
- Java求解一元二次方程+单元测试(IDEA+Junit)
介绍 环境配置 使用idea IDE 进行单元测试,首先需要安装JUnit 插件. 1.安装JUnit插件步骤 File–>settings–>Plguins–>Browse rep ...
最新文章
- 多台linux无密码访问之方法二
- IOS基础:声音调用
- IDEA突然自动关闭然后无法启动
- unity读取服务器上的文件夹,unity 如何使用文件流读取streamingassets下的资源
- windows 2013 datacenter 安装sql server2008 r2兼容性
- python appium 并行多设备_appium 多个设备同时执行
- 32位plsql连接64位oracle客户端,使用32位PLSQL通过64位的ORACLE客户端连接到64位的数据库...
- 7pin数码屏的使用
- Ubuntu18.04忘记超级用户root密码,重新设置密码
- 【C语言】用C语言输出菱形
- 模拟器使用Fiddler代理后,浏览器报错【该网站的安全证书有问题】解决方法
- 福禄克FLUKE TIX650红外热像仪3.5英寸高像素大屏
- 含有一般疑问句的歌_一般疑问句,特殊疑问句和否定句
- arm服务器测评_某ARM服务器与X86服务器简单性能对比
- 每日一狗 · 惠比特犬
- 如何在 Win上写 Python 代码?最佳攻略来袭
- QMetaObject使用
- 南京邮电大学微型计算机原理与接口技术实验,南京邮电大学《微机原理与接口技术》上机实验参考答案(四次全).pdf...
- vuetify图标大全
- http-request(http-request例子)
热门文章
- JAVA并发七(多线程环境中安全使用集合API)
- python string与list互转
- CSS3实现小黄人动画
- localToGlobal 本地转换全局
- Mysql 外键创建失败原因
- weblogic问题: Unable to resolve 'jdbc.mydb'. Resolved 'jdbc'; remaining name '
- pyspark与jupyter集成
- repo同步代码_工欲善其事,必先利其器:repo 介绍
- 在线判题系统(oj)效果分析图_在线代码编写平台开发分享
- kali linux改中文_【亲测实验】kali linux 2020 设置为中文方法