今天自己实现了八皇后的问题,其实代码并不长,但是关于虚拟机中怎样实现的想了好长时间特别是红色部分。现在还是有点不是很明白。代码如下,已经实现运行。

public class EightQueen {

public static int sum = 0; //累计方法总数

public static final int MAXQUEEN = 8;//皇后个数,同时也是棋盘行列总数

public static int []columnForRow = new int[MAXQUEEN]; //定义数组,表示8列棋子摆放情况

public static void main(String[] args) {

placeQueue(0);

System.out.println();

System.out.println("共有"+sum+"走法。");

}

//检查所放位子是否合法。

public static boolean check(int row){

boolean t=true;

for(int i=0;i

/*

* 放在同一列,绝对值=0;

* 放在对角线,绝对值=1;

* 放在斜对角线,绝对值=-1

**/

int diff=Math.abs(columnForRow[row]-columnForRow[i]);

if ((diff==0)||(diff==row-i)){

t=false;break;

}

}

return t;

}

//放棋子的具体过程。

public static void placeQueue(int row){

if(row==MAXQUEEN){

sum++;

printBoard();

return;

}

for(int i=0;i

columnForRow[row]=i;

if(check(row)){

placeQueue(row+1);

}

}

}

//输出结果

public static void printBoard(){

System.out.println("第"+sum+"个走法:");

for(int i=0;i

for(int j=0;j

if(j!=columnForRow[i]){

System.out.print("+");

}else System.out.print("Q");

}System.out.println();

}

}

}

java中经典八皇后难题_Java实现经典八皇后的问题相关推荐

  1. Java黑皮书课后题第7章:***7.36(游戏:八皇后问题)经典的八皇后难题是要将八个皇后放在棋盘上,任何两个皇后都不能相互攻击(没有两个皇后在同行、同列、同一对角线)。编写程序显示一个解决方案

    7.36(游戏:八皇后问题)经典的八皇后难题是要将八个皇后放在棋盘上,任何两个皇后都不能相互攻击(没有两个皇后在同行.同列.同一对角线).编写程序显示一个解决方案 题目 题目描述 破题 题目 题目描述 ...

  2. java中必检异常有哪些_Java面试题经典面试题220道(附答案)

    Java基础: 1.JDK 和 JRE 有什么区别? 2. == 和 equals 的区别是什么?== 解读 3. 两个对象的 hashCode() 相同, 那么 equals() 也一定为 true ...

  3. java中实现具有传递性吗_Java中volatile关键字详解,jvm内存模型,原子性、可见性、有序性...

    一.Java内存模型 想要理解volatile为什么能确保可见性,就要先理解Java中的内存模型是什么样的. Java内存模型规定了所有的变量都存储在主内存中.每条线程中还有自己的工作内存,线程的工作 ...

  4. java中检查性异常类_Java异常处理、java语言推崇使用检查类型异常

    异常处理是java语言的重要特性之一,<Three Rules for effective Exception Handling>一文中是这么解释的:它主要帮助我们在debug的过程中解决 ...

  5. java中什么是线程安全_Java 多线程:什么是线程安全性

    线程安全性 什么是线程安全性 <Java Concurrency In Practice>一书的作者 Brian Goetz 是这样描述"线程安全"的:"当多 ...

  6. java中无限循环的方法_Java中的无限循环

    Java中的无限循环 在Java中查看下面的无限while循环. 它会导致它下面的语句编译时错误. while(true) { System.out.println("inside whil ...

  7. java中的for语句格式_Java中foreach循环语句的格式可以写成(        )。

    [其它]1) 了解. 收集.整理 原研哉生平.设计理念及经典代表作 (可交) 2) google baidu 简洁的页面 丰富的变化 收集 (可交 ) [单选题]ABS 塑料通常用于 Jaguar L ...

  8. java中的匿名类方法覆盖_Java技巧:用匿名类来实现简化程序调试

    Java技巧:用匿名类来实现简化程序调试 在Java中,匿名类(Anonymous inner classes)多用来处理事件(event handle).但其实,它们对于debug也很有帮助.本文将 ...

  9. java中用于选择按钮的语句_java程序员考试套题1

    Java练习一 一.选择题 1.在Java中,下列()方法可以把JFrame对象jFrame的布局管理器设为FlowLayout 类型. A.jFrame.setLayout(new FlowLayo ...

最新文章

  1. gridview列 数字、货币和日期 显示格式
  2. 如果你还记得我[转载]
  3. LeetCode ZigZag Conversion
  4. Python学习笔记:Day14 完成Web App
  5. linux之路由知识之ip route 命令中的疑惑
  6. firfox 和 chrome 移动端Web开发页面调试
  7. verilog加法器_【HDL系列】Kogge-Stone加法器原理与设计
  8. 问题 G: Search Problem (IV)
  9. nbu备份nas文件服务器,NBU备份恢复实践
  10. HTML注释和js注释,js 注释
  11. vmware虚拟机添加物理网卡与虚拟网卡
  12. 其它——简历编写、五险一金、补充一些就业相关的东西
  13. 7.1 我的质量之旅
  14. SQLSERVER2005发送邮件
  15. 网站分析-网站流量分析
  16. makefile写法整理
  17. android room 主线程,Android Jetpack之Room篇
  18. 基于机器学习算法的LTE高投诉小区预判方法
  19. VB.net中字符串转16进制,string转byte,串口发送文本直接转16进制数据
  20. 计算机专业博士毕业月薪多少一般,博士毕业月薪多少一般 好找工作吗

热门文章

  1. Google 是如何定制 Material 主题的?
  2. 一文读懂:完整的支付系统整体架构
  3. 工具类静态方法注入dao
  4. usermod命令的一些用法详解
  5. linux使用rz、sz快速上传、下载文件
  6. JQuery操作checkbox、radio
  7. 大哥大——传呼机的年代
  8. 用二维编码做特色名片!
  9. Servlet的Cookie值保存与获取
  10. Mach-O 二进制文件解析