代码实现:

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皇后问题相关推荐

  1. 回溯法求解N皇后问题(Java实现)

    回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并以此慢慢地扩大问题规模,迭代地逼近最终问题的解.这种迭代类似于穷举并且是试探性的,因为当目前的可 ...

  2. C语言局部搜索算法(爬山法,模拟退火法,遗传算法)求解八皇后问题

    C语言局部算法求解八皇后问题 写在前面 八皇后问题及局部搜索算法 爬山法(hill-climbing searching) 算法介绍 代码实现 退火法(simulated annealing) 算法介 ...

  3. 数据结构学习之栈求解n皇后问题

    数据结构学习之栈求解n皇后问题 0x1 目的 ​ 深入掌握栈应用的算法和设计 0x2 内容 ​ 编写一个程序exp3-8.cpp求解n皇后问题. 0x3 问题描述 即在n×n的方格棋盘上,放置n个皇后 ...

  4. 非递归求解N皇后问题(回溯法)

    一般而言,回溯法可以说是一种穷举法,适合于求解各种深度优先搜索的问题. 回溯法是一种应用广泛的算法.其关键点是解空间树和n元组可行解的定义. 非递归回溯法程序的结构基本上是相同的,该程序的结构可以用求 ...

  5. Java——求解一元n次方程(V1.0)

    Java--求解一元n次方程(V1.0) 主要思路 通过 接口(interface) 进行求解方法声明,通过 implements 声明自己使用的接口 通过字符串 equals() 方法以及 whil ...

  6. 爬山法求解八皇后问题的全部解法

    爬山法求解八皇后问题的全部解法 程序的概要设计思想 初始状态 冲突函数 寻找邻居状态 寻找全部解集 程序主要函数的作用 运行结果截图 Python源代码 程序的概要设计思想 爬山算法是一种局部贪婪算法 ...

  7. 回溯法求解N皇后问题及其时间复杂度分析

    回溯法求解N皇后问题及其时间复杂度分析 一.回溯法简介 1. 什么是回溯法? 2. 回溯法的时间复杂度分析 蒙特卡罗方法 蒙特卡罗方法在回溯法求解时间复杂度中的应用 二.回溯法求解N皇后问题 1. 回 ...

  8. 利用Java求解“鸡兔同笼问题”:鸡和兔在一个笼子里,共有腿100条,头40个,问鸡兔各有几只?

    Java求解"鸡兔同笼问题" public class Jttl {public static void main(String[] args) {int jt = 0 ;whil ...

  9. 链表之反转链表,万金油的解题方法(java求解)

    链表之反转链表,一招鲜吃遍天(java求解) 内容目录 链表之反转链表,一招鲜吃遍天(java求解) 解题万金油 栗子1:反转整个链表 栗子2:反转某个区间内的链表 栗子3:按照k为一组,反转某个区间 ...

  10. Java求解一元二次方程+单元测试(IDEA+Junit)

    介绍 环境配置 使用idea IDE 进行单元测试,首先需要安装JUnit 插件. 1.安装JUnit插件步骤 File–>settings–>Plguins–>Browse rep ...

最新文章

  1. 多台linux无密码访问之方法二
  2. IOS基础:声音调用
  3. IDEA突然自动关闭然后无法启动
  4. unity读取服务器上的文件夹,unity 如何使用文件流读取streamingassets下的资源
  5. windows 2013 datacenter 安装sql server2008 r2兼容性
  6. python appium 并行多设备_appium 多个设备同时执行
  7. 32位plsql连接64位oracle客户端,使用32位PLSQL通过64位的ORACLE客户端连接到64位的数据库...
  8. 7pin数码屏的使用
  9. Ubuntu18.04忘记超级用户root密码,重新设置密码
  10. 【C语言】用C语言输出菱形
  11. 模拟器使用Fiddler代理后,浏览器报错【该网站的安全证书有问题】解决方法
  12. 福禄克FLUKE TIX650红外热像仪3.5英寸高像素大屏
  13. 含有一般疑问句的歌_一般疑问句,特殊疑问句和否定句
  14. arm服务器测评_某ARM服务器与X86服务器简单性能对比
  15. 每日一狗 · 惠比特犬
  16. 如何在 Win上写 Python 代码?最佳攻略来袭
  17. QMetaObject使用
  18. 南京邮电大学微型计算机原理与接口技术实验,南京邮电大学《微机原理与接口技术》上机实验参考答案(四次全).pdf...
  19. vuetify图标大全
  20. http-request(http-request例子)

热门文章

  1. JAVA并发七(多线程环境中安全使用集合API)
  2. python string与list互转
  3. CSS3实现小黄人动画
  4. localToGlobal 本地转换全局
  5. Mysql 外键创建失败原因
  6. weblogic问题: Unable to resolve 'jdbc.mydb'. Resolved 'jdbc'; remaining name '
  7. pyspark与jupyter集成
  8. repo同步代码_工欲善其事,必先利其器:repo 介绍
  9. 在线判题系统(oj)效果分析图_在线代码编写平台开发分享
  10. kali linux改中文_【亲测实验】kali linux 2020 设置为中文方法