问题说明:

八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯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实现八皇后问题相关推荐

  1. 用java实现八皇后问题_使用java语言实现八皇后问题

    八皇后问题,在一个8X8的棋盘中,放置八个棋子,每个棋子的上下左右,左上左下,右上右下方向上不得有其他棋子.正确答案为92中,接下来用java语言实现. 解: package eightQuen; / ...

  2. 算法与数据结构(Java解八皇后问题)

    八皇后问题 思路: 八个皇后互不冲突,即同一行同一列只能出现一位皇后.以行为标准,每一行只能放入一位皇后.可以使用一个一维数组来表示皇后的位置,一维数组的下表表示行数,一维数组中的元素表示列数. in ...

  3. Java实现八皇后问题的解法(一维数组版本)

    最近接触了数据结构与算法,这本该是计算机专业的同学大一就掌握的课程,可我现在才算正式接触,感到惭愧万分.但闻道有先后,术业有专攻.本篇博客开始记录本人学习数据结构与算法这门课的点滴,希望自己能坚持下去 ...

  4. java编写八皇后算法

    /*** 八皇后* @Author:yangle* @Date:2020/9/23* @version:1.0*/ public class test {public static int num = ...

  5. java递归-八皇后问题(回溯算法)

    1.八皇后问题介绍 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于 1848 年提出:在 8×8 格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任 ...

  6. java计算八皇后_八皇后java算法

    public class NQueens {  public static int num = 0; // 累计方案总数 public static final int MAXQUEEN = 5;// ...

  7. 递归解决八皇后问题-小昝

    引言 由于大学课堂中数据结构中并没有讲一些常见的算法,只是讲的比较简单的定义.所以拿出来暑假时间去研究经典的算法.本文章是研究的八皇后问题.八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 ...

  8. C语言编程统计八皇后问题的解的个数,八皇后问题C语言解法

    偶遇八皇后问题,随即自己写了一个仅供参考 #include #include #define SIZE 8 void Circumsribe(int(*checkerboard)[SIZE], int ...

  9. 八皇后java_经典八皇后问题:Java语言

    问题描述:将八个皇后放在棋盘上,任何两个皇后都不能互相攻击(即没有任何两个皇后在同一行.同一列或者同一对角线上)如图所示,题目来自于<java语言程序设计:基础篇>练习题6.20和6.22 ...

  10. 八皇后问题的Java递归算法

    1. 八皇后问题 在8*8的棋盘上,放置8个皇后,使各个皇后之间不处于同一行.同一列.同一斜线上,如下图红线部分是和中间红色圆圈冲突位置. 2. 八皇后的递归分析 1. 使用递归分析,首先,第一个皇后 ...

最新文章

  1. 欺诈网站都注重用户体验!你,还在等什么?!
  2. 架构 encoder_一种新的超分模型蒸馏架构 (ECCV2020)
  3. ROS知识: vanilla(香草) CMakeLists.txt 的语法
  4. 数学之美 系列十三 信息指纹及其应用
  5. CodeForces - 1304D Shortest and Longest LIS(构造+贪心)
  6. 12个便于web设计及开发的在线工具
  7. 【ThinkPHP 开发辅助系统】问答
  8. ogg格式文件怎么转mp3格式
  9. canvas学习之-七色板
  10. aspen怎么做灵敏度分析_灵敏度分析aspen
  11. 运用人类「从众心理」!掌握简单心理学成为说服高手
  12. 微信小程序开发:腾讯地图集成步骤(旧题新说)
  13. Qt: 读取/写入文本文件内容
  14. 利用Python进行随机取名
  15. 主键和外键的含义及区别
  16. 八种消除沟通上的不良习惯地的方法
  17. 使用 arxiv-sanity paperwithcode 跟进最新研究领域的文章
  18. 解读《海贼王》—(一)
  19. 毕业设计 STM32单片机的蓝牙智能计步器手环
  20. Windows10桌面美化软件与技巧

热门文章

  1. 手把手教你:个人信贷违约预测模型
  2. 关于国际标准书号ISBN
  3. Asp.Net 企业微信JS-SDK开发(随手笔记)
  4. PHP序列化与反序列化
  5. 智能人物画像综合分析系统——Day3
  6. 输入法linux debin,Debian下安装搜狗拼音输入法
  7. codeforces 158E. Phone Talks(dp)
  8. 阻抗,特征阻抗与等效阻抗
  9. WPF参考书籍及资料推荐(转)
  10. 网页嵌入谷歌翻译js插件