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

解:

package eightQuen;

/**

* 八皇后问题

*

* @author 83771

*

*/

public class eight {

// 定义一个数组 表示棋盘

public static Integer[][] checkerBoard = new Integer[8][8];

// 棋盘副本

public static Integer[][] checkerBoardCopy = new Integer[8][8];

// 计数器 用于计数有多少种方法

public static Integer jishu = 1;

// 定义横竖斜方向上是否有棋子

public static boolean flag1 = true;

public static boolean flag2 = true;

public static boolean flag3 = true;

public static boolean flag4 = true;

// 初始化一个棋盘 8x8

public static void init() {

for (int i = 0; i < 8; i++) {

for (int j = 0; j < 8; j++) {

System.out.print(0 + " ");

checkerBoard[i][j] = 0;

}

System.out.println();

}

checkerBoardCopy = checkerBoard;

}

// 递归测试方法

public static void startTest(int row) {

for (int col = 0; col < 8; col++) {

if (checkCheet(row, col, checkerBoardCopy) == 1) {

if (row < 7) {

startTest(++row);

--row;

}

}

// 该行重新赋值为0 进行下一次判断

checkerBoardCopy[row][col] = 0;

}

}

// 检查是否危险

// row行

// col列

public static int checkCheet(int row, int col, Integer[][] checkerBoardCopy) {

flag1 = true;

flag2 = true;

flag3 = true;

flag4 = true;

// 行方向上是否满足条件

for (int i = 0; i < 8; i++) {

if (checkerBoardCopy[row][i] == 1) {

flag1 = false;

break;

}

}

// 列方向上是否满足条件

for (int j = 0; j < 8; j++) {

if (checkerBoardCopy[j][col] == 1) {

flag2 = false;

break;

}

}

// 右下方向

for (int i = row, j = col; i < 8 & j < 8; i++, j++) {

if (checkerBoardCopy[i][j] == 1) {

flag3 = false;

break;

}

}

// 左上方向

for (int i = row, j = col; i >= 0 & j >= 0; i--, j--) {

if (checkerBoardCopy[i][j] == 1) {

flag3 = false;

break;

}

}

// 左下方向

for (int i = row, j = col; i < 8 & j >= 0; i++, j--) {

if (checkerBoardCopy[i][j] == 1) {

flag4 = false;

break;

}

}

// 右上方向

for (int i = row, j = col; i >= 0 & j < 8; i--, j++) {

if (checkerBoardCopy[i][j] == 1) {

flag4 = false;

break;

}

}

if (flag1 & flag2 & flag3 & flag4) {

// 若为真 增此点的值赋为1

checkerBoardCopy[row][col] = 1;

// 如果已经判断到最后一行 并且最后一行也符合情况 打印整个棋盘

if (row == 7) {

printCheets(checkerBoardCopy);

}

return 1;

}

return 0;

}

// 打印棋盘方法

public static void printCheets(Integer[][] checkerBoardCopy) {

for (int i = 0; i < 8; i++) {

for (int j = 0; j < 8; j++) {

System.out.print(checkerBoardCopy[i][j] + " ");

}

System.out.println();

}

System.out.println("=================" + jishu++);

}

public static void main(String[] args) {

init();

startTest(0);

}

}

copy后可直接运行。 记一下这次的代码。

用java实现八皇后问题_使用java语言实现八皇后问题相关推荐

  1. 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目

    王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...

  2. java 黑白皇后算法_不思议迷宫黑白皇后怎么样 值得培养吗

    不思议迷宫黑白皇后冈布奥怎么样?厉害吗?在游戏中,黑白皇后是来自深渊的咆哮阵营的冒险系冈布奥,玩家可以在主教的阴谋活动副本中获取黑白皇后.那么,黑白皇后有什么技能呢?是否值得培养?下面就和973手游小 ...

  3. java jsp取静态常量_获取java静态

    Android NDK开发系列教程4:对类变量进行操作 终于建了一个自己个人小站:https://huangtianyu.gitee.io,以后优先更新小站博客,欢迎进站,O(∩_∩)O~~ 通常我们 ...

  4. java原生的编译软件_原生态Java 程序员容易忽视的编程细节

    Java是Java程序设计语言和Java平台的总称,要想学好一门语言,打好基础最关键的,学习一种新的编程语言比学习新的口头语言要容易得多.然而,在这两种学习过程中,都要付出额外的努力去学习不带口音地说 ...

  5. java课后习题七解析_《Java基础入门》_课后习题解析.doc

    <Java基础入门>_课后习题解析 <Java基础入门>课后习题 Java开发入门 一.填空题 1.Java的三大体系分别是_JavaSE_____._JavaEE_____. ...

  6. java课后习题及答案_《java基础入门》课后习题及答案.doc

    <java基础入门>课后习题及答案.doc <Java 基础入门>课后习题及答案博学谷--让 IT 教学更简单,让 IT 学习更有效<Java 基础入门> 课后习题 ...

  7. java 实训指导书_《Java程序设计》实训指导书

    <Java程序设计>实训指导书 <Java 程序设计>实训指导书项目(实训)指导书 系 别: 计算机系 专 业: 软件技术 课 程: Java 程序设计 制 订 人: 葛汉强 ...

  8. java的关键字和保留字_「Java」详解常见的53个关键字

    1.在Java中目前一共有53个关键字: 其中由51+2个保留字=53个关键字 [友情提示 : Java的关键字都是小写哟] 2.Java的保留字有多少个?分别是什么? 答:Java的保留字有2个,J ...

  9. java基础入门课后习题_《Java基础入门》课后习题及答案

    <Java基础入门>课后习题及答案Java基础入门,课后习题,答案 博学谷--让IT教学更简单,让IT学习更有效 <Java基础入门>课后习题 第1章Java开发入门 一.填空 ...

  10. java ug二次开发_使用Java进行UG二次开发:简单的例子(上) | 学步园

    最近因为要进行TeamCenter二次开发(胖客户端定制),所有要开始研究Java了.因此突发奇想为什么不能使用Java进行二次开发呢?现在对UG进行的开发以C/C++应用为主.大多数使用的是原来的U ...

最新文章

  1. linux ssh 连接超时中断 解决方法
  2. 原相机水印怎么改字_抖音/自媒体做影视二次剪辑,如何下载高清无水印视频?...
  3. c++primer练习13.42
  4. 学习使用 Manifest
  5. android commit apply,关于SharedPreference的commit和apply和ANR
  6. 使用git恢复未提交的误删数据
  7. vCenter HA (至少VCSA6.5及以上)
  8. python简单笔试题_这十道经典Python笔试题,全做对算我输
  9. 短信接口安全防护策略
  10. 国家集训队论文99~08年全版
  11. 51单片机-波特率的计算定时器初始值的计算
  12. 数据通信与网络:CH5 Analog Transmission
  13. 深度学习图像数据库总结(收藏用)
  14. 华为机试题练习(一)
  15. Java***冒泡排序***
  16. 手把手Neo4j教程,超全!!!
  17. matlab tikz,TeX系列: matlab2tikz--matlab图形数据转化为tikz命令
  18. 计算机要素--第六章 汇编编译器
  19. MySQL 报错:Error Code: 1264. Out of range value for column ‘final‘ at row 5
  20. UE4 蓝图Structure与Xml的读取

热门文章

  1. oracle 表类型变量的使用
  2. LaTeX Test
  3. ChartDirector Python创建建多层甘特图的代码
  4. ubuntu14.04部署Ganglia
  5. maven打包jar上传到nexus
  6. Windows bat with adb
  7. CentOS(5.8/6.4)linux生产环境若干优化实战------就爱运维
  8. Midnight.js – 实现奇妙的固定头部切换效果
  9. mysql-mha高可用
  10. Sharepoint Caml查询中时间格式