怎么使用Java递归回溯解决八皇后的问题
发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,这篇文章主要介绍"怎么使用Java递归回溯解决八皇后的问题",在日常操作中,相信很多人在怎么使用Java递归回溯解决八皇后的问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家
千家信息网最后更新 2025年02月07日怎么使用Java递归回溯解决八皇后的问题
这篇文章主要介绍"怎么使用Java递归回溯解决八皇后的问题",在日常操作中,相信很多人在怎么使用Java递归回溯解决八皇后的问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么使用Java递归回溯解决八皇后的问题"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
八皇后问题
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
解决思路
①第一个皇后先放第一行第一列。
②第二个皇后放在第二行第一列、然后判断是否OK,如果不0K, 继续放在第二列、第三列、依次把所有列都放完,找到一个合适。
③继续第三个皇后, 还是第一列、第二列…直到第8个皇后也能放在一个不冲突的位置,算是找到了一个正确解。
④当得到一个正确解时,在栈回退到上一个栈时,就会开始回溯,即将第一个皇后,放到第一列的所有正确解,全部得到。
⑤然后回头继续第-一个皇后放第二列,后面继续循环执行①②③④的步骤。
代码实现
/** * @Author: Yeman * @Date: 2021-10-31-15:48 * @Description: */public class Queue8 { int max = 8; //8个皇后 int[] arr = new int[max]; //下标为第几个(即第几行),值为第几列 static int count = 0; //多少个放法 static int judgeCount = 0; //判断了多少次 public static void main(String[] args) { Queue8 queue8 = new Queue8(); queue8.check(0); System.out.printf("一共有%d种解法\n",count); System.out.printf("一共判断了%d次",judgeCount); } //用来放置第n个皇后 private void check(int n){ if (n == max){ //n为8相当于是第九个皇后了,说明已经全部放好了 print(); return; } for (int i = 0; i < arr.length; i++) { arr[n] = i; if (judge(n)){ //不冲突 check(n+1); } } } //用来第n个皇后判断与前面的所有皇后是否冲突 private boolean judge(int n){ judgeCount++; for (int i = 0; i < n; i++) { //是否同列同斜线 if (arr[i] == arr[n] || Math.abs(arr[i]-arr[n]) == Math.abs(i-n)){ return false; } } return true; } //输出每一种放法 private void print(){ count++; for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } System.out.println(); }}
运行结果
(截取部分)
到此,关于"怎么使用Java递归回溯解决八皇后的问题"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
皇后
问题
递归
学习
冲突
一行
国际
斜线
更多
帮助
古老
合适
实用
著名
接下来
三个
下标
两个
代码
位置
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
亳州朗涯互联网科技有限公司
校园网网络安全分析
主流数据库技术介绍
在家怎么玩数据库
如何预防网络安全信息
网络安全创新能力比赛
云服务器标准类型sa2
简述数据库数据库系统的特点
网络技术再好有啥用
raid服务器
网络安全管理员加微信
网络安全问题论文的前言
关于网络安全教育的班会流程
云服务器怎么查看网站代码
modbus服务器
数据库与网络工程师的区别
集团网络安全工程师
教育网络安全特色宣传
ps杀手2连接不到服务器
网络安全高速公路机电
大数据选择什么数据库
2b2t服务器哪个好玩
数据库与前端页面连接
朔州智能服务器
安丘市希品互联网科技中心
dnf西海岸服务器
陕西易点网络技术有限公司
汇丰软件开发工资多少
高并发 服务器配置
路由器vpn服务器配置