Java实现八皇后问题
问题说明:
八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:
在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。高斯认为有76种方案。
1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。在计算机问世后有更多的方法。
问题分析:
对于一个8 x 8的棋盘来说,我们很容易想象到使用二维数组来解决这个问题,但实际上我们只需要使用一个一维数组。
我们通过一维数组arr[8]来解决,首先我们可以利用下标 i 用来代表行数-1,arr[i]中的值代表列数-1,这样我们就很好的完成了对于一个棋盘的设计。
步骤:
1. 将第一个王后放在第一行的第一列。
2. 将第二个皇后放置第二行的第一列,然后进行判断是否满足条件,如果不满足则放置在第二列、第三列...,直到满足条件。
3. 继续第三个皇后放置第三行的第一列,然后继续判断是否满足,如果不满足则放置第二列、第三列... 。
4. 当得到一个正确的解后,我们可以将其打印出来,然后进行回溯,重新回到第一步,然后重复2、3、4步,直到所有的情况都结束,完成程序。
代码实现如下:
public class Queue02{static int Max=8;static int a[]=new int[Max]; static int count=0;public static void main(String[] args){put(0);System.out.println("最多有"+count+"种排序");}public static void print(){count++;for(int i=0;i<Max;i++){System.out.print(a[i]+" ");}System.out.println();}public static boolean judge(int n){for(int i=0;i<n;i++){if(a[n]==a[i] || n-i==Math.abs(a[n]-a[i])){return false;}}return true;}public static void put(int n){//打印完结束if(n == Max){print();return;}for(int i=0;i<Max;i++){a[n]=i;if(judge(n)){put(n+1);}}}
}
就此实现八皇后问题。
Java实现八皇后问题相关推荐
- 用java实现八皇后问题_使用java语言实现八皇后问题
八皇后问题,在一个8X8的棋盘中,放置八个棋子,每个棋子的上下左右,左上左下,右上右下方向上不得有其他棋子.正确答案为92中,接下来用java语言实现. 解: package eightQuen; / ...
- 算法与数据结构(Java解八皇后问题)
八皇后问题 思路: 八个皇后互不冲突,即同一行同一列只能出现一位皇后.以行为标准,每一行只能放入一位皇后.可以使用一个一维数组来表示皇后的位置,一维数组的下表表示行数,一维数组中的元素表示列数. in ...
- Java实现八皇后问题的解法(一维数组版本)
最近接触了数据结构与算法,这本该是计算机专业的同学大一就掌握的课程,可我现在才算正式接触,感到惭愧万分.但闻道有先后,术业有专攻.本篇博客开始记录本人学习数据结构与算法这门课的点滴,希望自己能坚持下去 ...
- java编写八皇后算法
/*** 八皇后* @Author:yangle* @Date:2020/9/23* @version:1.0*/ public class test {public static int num = ...
- java递归-八皇后问题(回溯算法)
1.八皇后问题介绍 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于 1848 年提出:在 8×8 格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任 ...
- java计算八皇后_八皇后java算法
public class NQueens { public static int num = 0; // 累计方案总数 public static final int MAXQUEEN = 5;// ...
- 递归解决八皇后问题-小昝
引言 由于大学课堂中数据结构中并没有讲一些常见的算法,只是讲的比较简单的定义.所以拿出来暑假时间去研究经典的算法.本文章是研究的八皇后问题.八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 ...
- C语言编程统计八皇后问题的解的个数,八皇后问题C语言解法
偶遇八皇后问题,随即自己写了一个仅供参考 #include #include #define SIZE 8 void Circumsribe(int(*checkerboard)[SIZE], int ...
- 八皇后java_经典八皇后问题:Java语言
问题描述:将八个皇后放在棋盘上,任何两个皇后都不能互相攻击(即没有任何两个皇后在同一行.同一列或者同一对角线上)如图所示,题目来自于<java语言程序设计:基础篇>练习题6.20和6.22 ...
- 八皇后问题的Java递归算法
1. 八皇后问题 在8*8的棋盘上,放置8个皇后,使各个皇后之间不处于同一行.同一列.同一斜线上,如下图红线部分是和中间红色圆圈冲突位置. 2. 八皇后的递归分析 1. 使用递归分析,首先,第一个皇后 ...
最新文章
- 欺诈网站都注重用户体验!你,还在等什么?!
- 架构 encoder_一种新的超分模型蒸馏架构 (ECCV2020)
- ROS知识: vanilla(香草) CMakeLists.txt 的语法
- 数学之美 系列十三 信息指纹及其应用
- CodeForces - 1304D Shortest and Longest LIS(构造+贪心)
- 12个便于web设计及开发的在线工具
- 【ThinkPHP 开发辅助系统】问答
- ogg格式文件怎么转mp3格式
- canvas学习之-七色板
- aspen怎么做灵敏度分析_灵敏度分析aspen
- 运用人类「从众心理」!掌握简单心理学成为说服高手
- 微信小程序开发:腾讯地图集成步骤(旧题新说)
- Qt: 读取/写入文本文件内容
- 利用Python进行随机取名
- 主键和外键的含义及区别
- 八种消除沟通上的不良习惯地的方法
- 使用 arxiv-sanity paperwithcode 跟进最新研究领域的文章
- 解读《海贼王》—(一)
- 毕业设计 STM32单片机的蓝牙智能计步器手环
- Windows10桌面美化软件与技巧