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实现递归回溯,解决八皇后问题,数据结构与算法相关推荐
- 递归回溯解决八皇后问题
文章目录 前言 八皇后问题 问题解析 代码实现 完整代码 前言 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题.该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇 ...
- 递归/回溯:八皇后问题N-Queens
N皇后问题是计算机科学中最为经典的问题之一,该问题可追溯到1848年,由国 际西洋棋棋手马克斯·贝瑟尔于提出了8皇后问题. 将N个皇后放摆放在N*N的棋盘中,互相不可攻击,有多少种摆放方式,每种摆 放 ...
- 数据结构:回溯--解决八皇后问题
public class Queue8 {int max = 8;int count = 1;// 定义数组,保存皇后放置位置的结果,比如arr = {0,4,7,5,2,6,1,3}int[] ar ...
- 回溯法在解决八皇后问题中的应用
回溯法:有这样一类题目,它们要求在相对问题的输入规模按照指数速度增长(或者更快)的域中,找出一个具有指定特性的元素.例如:在图顶点的所有排列中求一个哈密顿回路,在背包问题的一个实例中求其中最有价值的物 ...
- 回溯算法解决八皇后_4皇后问题和使用回溯算法的解决方案
回溯算法解决八皇后 4-皇后问题 (4 - Queen's problem) In 4- queens problem, we have 4 queens to be placed on a 4*4 ...
- 【算法】递归|迷宫回溯问题|八皇后问题
[算法]递归|迷宫回溯问题|八皇后问题 迷宫回溯问题,要用动态的眼光来看待这个递归算法. package com.serein.recursion;/*** @author baichuan* @ ...
- 有趣的数据结构算法12——利用递归解决八皇后问题
有趣的数据结构算法12--利用递归解决八皇后问题 题目复述 解题思路 实现代码 GITHUB下载连接 本次教程主要讲述如何利用递归解决八皇后问题,它和汉诺塔一样让人很难过. 题目复述 据说西洋棋手都具 ...
- 遗传算法解决八皇后问题(java源码)
本文源码下载链接:https://download.csdn.net/download/goulvjiang3176/11221063 另有贪心算法解决八皇后问题的源码下载链接:https://dow ...
- 用lua解决八皇后问题
要解决八皇后问题,首先必须认识到每一行中只能有一个皇后.因此,可以用一个由8个数字组成的简单数组来表示可能的解决方案.例如,数组{3,7,2,1,8,6,5,4}表示皇后在棋盘中的位置分别是( ...
- 运用全排列的方法解决八皇后问题
运用全排列的方法解决八皇后问题,可以分为两部分:全排列和八皇后,下面我将分开说明两个步骤. 首先说明八皇后: 第一步:就是把皇后按照0到8编号,然后对八个皇后进行全排列,一共有40320种排列方式. ...
最新文章
- 超越Google,快手落地业界首个万亿参数推荐精排模型
- java统计分析_数据统计(java实现)
- ASP.NET MVC 导入Excel文件
- 别再乱用 Prometheus 联邦了,分享一个 Prometheus 高可用新方案
- 大剑无锋之delete、drop、truncate【面试推荐】
- 如何查找SAP Cloud for Customer UI页面对应的技术模型明细
- 【批处理】肉鸡扫描脚本
- Java中文(汉子)转换拼音
- WDM驱动程序的基本结构和实例
- tp5 上传路径反斜杠的问题 ,反斜杠json_decode函数输出出错的
- ROS学习笔记---ros的通信机制
- 你就不怕此生就这样?
- OIO下的socket传输文件
- YOLOv5实现吸烟行为检测
- CAD梦想画图中的“阵列命令”
- 毕业一年经历两次大裁员......
- java单链表反转(头插法)详解
- 十九 Redis AOF持久化
- vue项目设置服务器地址,vue项目配置后端服务器地址
- Xv6 I/O 与文件描述符
热门文章
- OpenJPA:内存泄漏案例研究
- 再见,再见,5 * 60 * 1000 //五分钟,再见,再见
- Java EE 6示例– Galleria
- Solaris是出色的Java开发平台的原因
- Servlet中获取请求体的数据
- Linux 命令之 du -- 显示每个文件和目录的磁盘使用空间/所占用的磁盘空间大小/所使用的磁盘空间大小/查看文件和目录的大小
- android 技能标签功能_iOS和Android用户体验设计差异
- linux 丢包多少正常_Linux 问题故障定位,看看这篇
- android 6.0 dm-verity技术,Android 7.0安全性大幅提升,要求严格强制执行验证启动
- react打包后图片丢失_React中型项目的优化实践