第七章第三十六题(游戏:八皇后问题)(Game: Eight Queens)

  • ***7.36(游戏:八皇后问题)经典的八皇后难题是要将八个皇后放在棋盘上,任何两个皇后都不能互相攻击(即没有两个皇后是在同一行、同一列或者同一个对角上)。可能的解决方案有很多。编写程序显示一个这样的解决方案。
    ***7.36(Game: Eight Queens)The classic problem of eight queens is to put eight queens on the chessboard, and no two Queens can attack each other (that is, no two queens are on the same line, column or opposite corner). There are many possible solutions. Write a program to show such a solution.

  • 参考代码:

    package chapter07;public class Code_36 {// 定义一个数组 表示棋盘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;// 初始化一个棋盘 8x8public 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) {// 若为真 增此点的值赋为1checkerBoardCopy[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);}
    }
  • 结果显示:

    0    0    0    0    0    0    0    0
    0    0    0    0    0    0    0    0
    0    0    0    0    0    0    0    0
    0    0    0    0    0    0    0    0
    0    0    0    0    0    0    0    0
    0    0    0    0    0    0    0    0
    0    0    0    0    0    0    0    0
    0    0    0    0    0    0    0    0
    1   0   0   0   0   0   0   0
    0   0   0   0   1   0   0   0
    0   0   0   0   0   0   0   1
    0   0   0   0   0   1   0   0
    0   0   1   0   0   0   0   0
    0   0   0   0   0   0   1   0
    0   1   0   0   0   0   0   0
    0   0   0   1   0   0   0   0
    =================1
    1   0   0   0   0   0   0   0
    0   0   0   0   0   1   0   0
    0   0   0   0   0   0   0   1
    0   0   1   0   0   0   0   0
    0   0   0   0   0   0   1   0
    0   0   0   1   0   0   0   0
    0   1   0   0   0   0   0   0
    0   0   0   0   1   0   0   0
    =================2
    1   0   0   0   0   0   0   0
    0   0   0   0   0   0   1   0
    0   0   0   1   0   0   0   0
    0   0   0   0   0   1   0   0
    0   0   0   0   0   0   0   1
    0   1   0   0   0   0   0   0
    0   0   0   0   1   0   0   0
    0   0   1   0   0   0   0   0
    =================3
    1   0   0   0   0   0   0   0
    0   0   0   0   0   0   1   0
    0   0   0   0   1   0   0   0
    0   0   0   0   0   0   0   1
    0   1   0   0   0   0   0   0
    0   0   0   1   0   0   0   0
    0   0   0   0   0   1   0   0
    0   0   1   0   0   0   0   0
    =================4
    0   1   0   0   0   0   0   0
    0   0   0   1   0   0   0   0
    0   0   0   0   0   1   0   0
    0   0   0   0   0   0   0   1
    0   0   1   0   0   0   0   0
    1   0   0   0   0   0   0   0
    0   0   0   0   0   0   1   0
    0   0   0   0   1   0   0   0
    =================5
    0   1   0   0   0   0   0   0
    0   0   0   0   1   0   0   0
    0   0   0   0   0   0   1   0
    1   0   0   0   0   0   0   0
    0   0   1   0   0   0   0   0
    0   0   0   0   0   0   0   1
    0   0   0   0   0   1   0   0
    0   0   0   1   0   0   0   0
    =================6
    0   1   0   0   0   0   0   0
    0   0   0   0   1   0   0   0
    0   0   0   0   0   0   1   0
    0   0   0   1   0   0   0   0
    1   0   0   0   0   0   0   0
    0   0   0   0   0   0   0   1
    0   0   0   0   0   1   0   0
    0   0   1   0   0   0   0   0
    =================7Process finished with exit code 0

    总共有92个方案显示,但是由于篇幅太长就不复制过来了

第七章第三十六题(游戏:八皇后问题)(Game: Eight Queens)相关推荐

  1. 求正多边形的面积JAVA_第六章第三十六题(几何:正多边形的面积)(Geometry: area of a regular polygon)...

    *6.36(几何:正多边形的面积)正多边形是一个n条边的多边形,它的每条边的长度都相等,而且所有角的角度也相等(即多边形既是等边又等角的).计算正多边形面积的公式是: 使用下面的方法头编写方法,返回正 ...

  2. 第五章第三十五题(加法)(Summation)

    第五章第三十五题(加法)(Summation) *5.35(加法)编写程序,计算下面的和. *5.35(Summation) Write a program to compute the follow ...

  3. 第六章第三十四题(打印日历)(Print calendar) - 编程练习题答案

    **6.34(打印日历)编程练习题3.21使用Zeller一致性原理来计算某天是星期几.使用Zeller的算法简化程序清单6-12以获得每月开始的第一天是星期几. **6.34(Print calen ...

  4. 记录——《C Primer Plus (第五版)》第七章编程练习第六题

    编写一个程序读取输入,直到#,并报告序列ei出现的次数. # include <stdio.h>int main(void) {int cnt=0, j=1; //cnt记ei出现的次数 ...

  5. 第三百三十六章 斗宗强者间的大战!

    第三百三十六章 斗宗强者间的大战! <script language="javascript" src="/js/style2.js"></s ...

  6. 【正点原子FPGA连载】第三十六章 基于OV5640的PL以太网视频传输实验-摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0

    1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...

  7. 程序员编程艺术第三十六~三十七章、搜索智能提示suggestion,附近点搜索

    第三十六~三十七章.搜索智能提示suggestion,附近地点搜索 作者:July.致谢:caopengcs.胡果果. 时间:二零一三年九月七日. 题记 写博的近三年,整理了太多太多的笔试面试题,如微 ...

  8. 嵌入式实时操作系统ucos-ii_「正点原子NANO STM32开发板资料连载」第三十六章 UCOSII 实验 1任务调度...

    1)实验平台:alientek NANO STM32F411 V1开发板2)摘自<正点原子STM32F4 开发指南(HAL 库版>关注官方微信号公众号,获取更多资料:正点原子 第三十六章 ...

  9. 第二章第十六题(几何:六边形面积)(Geometry: area of a hexagon)

    第二章第十六题(几何:六边形面积)(Geometry: area of a hexagon) 2.16(几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积.计算六边形面积的公式是: ...

最新文章

  1. Spring基础专题——引言
  2. TCP协议属性设置之SO_REUSEADDR属性
  3. 0709-To Lower Case(转换成小写字母)
  4. 免费源码赠送之 pwm (vhdl)
  5. adb 获取当前activity_ADB 你想找的命令都在这里
  6. (7)3分钟搞定 C# 逻辑运算
  7. 数字信号 fft c源码_如何制作一个简单的人体动态识别微信小程序(附源码)
  8. 使用go来做系统,如何比java node php 更 简单
  9. python大学随机点名名_python用tkinter实现一个简易能进行随机点名的界面
  10. Hadoop集群搭建过程中ssh免密码登录(二)
  11. dubbo整合springmvc 使用 学习二(spring+dubbo+zookeeper单机服务)
  12. error: #error regenerate this file with a newer version of protoc.
  13. DIV CSS 网页兼容全搞定 (IE6 IE7 IE8 IE9 火狐 谷歌)
  14. java连接数据库配置文件
  15. 8086CPU指令系统--汇编语言算术运算指令(ADD/ADC、SUB/SBB、INC/DEC、CMP、MUL、DIV)
  16. 实际开发中常用的SQL
  17. docker学习笔记(10):docker迁移与升级等其它操作
  18. 16进制颜色值透明度百分比对照
  19. HTTP和HTTPS、HTTP返回码
  20. 单片机c语言基础知识,c语言必背100代码有哪些?

热门文章

  1. 编码规范与数学之美感想
  2. 用python解决数据结构与算法_python中各种数据结构与算法的解决技巧
  3. 含碘稀土铕(Ⅲ)配合物荧光微球/稀土铕配合物掺杂功能化二氧化硅微球的制备方法
  4. 做头条自媒体,如何让你的视频作品获得二次流量推荐?
  5. ACM数论基础:同余定理、欧拉定理、互质、阶与原根
  6. 游戏测试与软件测试的区别
  7. 嵌入式linux矩阵键盘,嵌入式linux matrix_keypad矩阵键盘驱动
  8. 什么是防关联浏览器?
  9. 短信猫实现短信验证小例子
  10. 陈大好:持续创造小而美的产品丨独立开发者 x 开放麦