说明

国际象棋的规则,皇后可以横着走,竖着走,对角线走.
这个是回溯算法的经典问题。

规则如下:

  1. 每行必须有一个皇后
  2. 每列,对角线最多只能有一个皇后。
  3. 求出所有的可行解。

下面左图为一种可行解,右图为一种不可行解。

算法实现

package backtracking;public class EightQueens {public static void main(String[] args) {EightQueens obj = new EightQueens();obj.cal8queens(0);}int count = 0;int[] result = new int[8];//全局或成员变量,下标表示行,值表示queen存储在哪一列public void cal8queens(int row) { // 调用方式:cal8queens(0);if (row == 8) { // 8个棋子都放置好了,打印结果printQueens(result);return; // 8行棋子都放好了,已经没法再往下递归了,所以就return}for (int column = 0; column < 8; ++column) { // 每一行都有8中放法if (isOk(row, column)) { // 有些放法不满足要求result[row] = column; // 第row行的棋子放到了column列cal8queens(row+1); // 考察下一行}}}private boolean isOk(int row, int column) {//判断row行column列放置是否合适int leftup = column - 1, rightup = column + 1;for (int i = row-1; i >= 0; --i) { // 逐行往上考察每一行if (result[i] == column) return false; // 第i行的column列有棋子吗?if (leftup >= 0) { // 考察左上对角线:第i行leftup列有棋子吗?if (result[i] == leftup) return false;}if (rightup < 8) { // 考察右上对角线:第i行rightup列有棋子吗?if (result[i] == rightup) return false;}--leftup; ++rightup;}return true;}private void printQueens(int[] result) { // 打印出一个二维矩阵System.out.println(">>>>>> solution  " + (++count) + "  <<<<<<<<");for (int row = 0; row < 8; ++row) {for (int column = 0; column < 8; ++column) {if (result[row] == column) System.out.print("Q ");else System.out.print("* ");}System.out.println();}System.out.println();}
}

结果输出:

>>>>>> solution  1  <<<<<<<<
Q * * * * * * *
* * * * Q * * *
* * * * * * * Q
* * * * * Q * *
* * Q * * * * *
* * * * * * Q *
* Q * * * * * *
* * * Q * * * * >>>>>> solution  2  <<<<<<<<
Q * * * * * * *
* * * * * Q * *
* * * * * * * Q
* * Q * * * * *
* * * * * * Q *
* * * Q * * * *
* Q * * * * * *
* * * * Q * * * ...>>>>>> solution  92  <<<<<<<<
* * * * * * * Q
* * * Q * * * *
Q * * * * * * *
* * Q * * * * *
* * * * * Q * *
* Q * * * * * *
* * * * * * Q *
* * * * Q * * * 

算法:eight Queens 8皇后问题相关推荐

  1. 三种算法求解经典N皇后问题

    三种算法求解经典N皇后问题 [问题描述] 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题.该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击, ...

  2. Eight Queens(八皇后)

    八皇后问题(英文:Eight queens),是由国际象棋棋手马克斯·贝瑟尔于1848年提出的问题,是回溯算法的典型案例. 问题表述为:在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个 ...

  3. 算法:递归-八皇后问题(回溯算法)

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

  4. 程序设计与算法----递归之n皇后问题

    问题描述 例题:n皇后 n皇后问题:输入整数n,要求n个国际象棋的皇后,摆在n*n的棋盘上,互相不能攻击(即n个皇后可以横着吃,斜着吃,竖着吃.),输出全部方案. 输入一个正整数N,则程序输出N皇后问 ...

  5. 算法笔记_072:N皇后问题(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 把n个皇后放在一个n*n的棋盘上,使得任何两个皇后都不能相互攻击,即它们不能同行,不能同列,也不能位于同一条对角线上. 2 解决方案 本文采用全排列 ...

  6. LeetCode算法题9:递归和回溯-N皇后问题

    文章目录 N 皇后 初始算法 : 修改后的算法 优化后的算法: 总结 N 皇后 题目链接:https://leetcode-cn.com/problems/n-queens/ 题目描述:n 皇后问题 ...

  7. python深度优先算法 八皇后_八皇后问题——DFS(深度优先搜索)

    八皇后问题,是在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法? 算法思路: 八皇后问题实质为一种深度优先(DFS)搜索问题. ...

  8. n皇后问题c语言_九章算法 | N皇后问题

    n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击(任意两个皇后不能位于同一行,同一列,同一斜线). 给定一个整数n,返回所有不同的n皇后问题的解决方案. 每个解决方案包含一个明确的 ...

  9. 八皇后时间复杂度_九章算法 | N皇后问题

    n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击(任意两个皇后不能位于同一行,同一列,同一斜线). 给定一个整数n,返回所有不同的n皇后问题的解决方案. 每个解决方案包含一个明确的 ...

  10. 数据结构与算法-- 八皇后问题(多种实现方案)

    八皇后问题解法一(排列筛选法) 本篇我们承接上一篇中的思想,想到了一个经典的算法题,八皇后问题: 题目:在8*8的国际象棋上摆放8个皇后,使得其互相不能攻击,即任意两个换后不能在同一行,同一列,或者同 ...

最新文章

  1. python解释器的安装步骤-Python本地及虚拟解释器配置过程解析
  2. 阿里云服务器购买及宝塔管理和如何部署springboot项目
  3. SAP UI5 初学者教程之二十五 - 使用代理服务器解决 SAP UI5 应用访问远端 OData 服务的跨域问题试读版
  4. 经典C/C++面试题
  5. 涂鸦WIFI模组方案(模组 SDK)
  6. 经典MapReduce作业和Yarn上MapReduce作业运行机制
  7. to_date , to_char
  8. 新浪uc2010免费下载
  9. 第十一节:JavaScript有了一种全新的数据类型:Symbol
  10. Amazon Seller Central is Temporarily Unavailable
  11. 服务器的数据库文件是哪个文件夹,Oracle数据库服务器参数文件管理技巧是什么?...
  12. Linux 切换到 root 用户后没有颜色
  13. 2017.05.12_SAP特殊功能
  14. 去阿里面试被问:如果是MySQL引起的CPU消耗过大,你会如何优化?
  15. IP地址 网络地址 主机地址
  16. GBK内码字符串转Unicode字符串
  17. java nlpir_1---------java调用NLPIR(ICTCLAS2016)实现分词功能
  18. 海南省主要城市商品住宅价格分析
  19. 自媒体文章如何提高原创度以及如何检测原创度
  20. 用简单英语谈生意-介绍篇

热门文章

  1. 1个app的完整测试用例_APP测试流程
  2. dev项目属性按钮是灰色_【网页特效】11 个文本输入和 6 个按钮操作 特效库
  3. 布局篇(1)—If you love css …
  4. 编译asp.net 2.0项目到dll文件
  5. Asp.Net细节性问题精萃[转]
  6. 【最佳实践】如何搭建反向代理服务访问OSS资源?
  7. 小程序WXML 使用小结
  8. python 基础 7.1 datetime 获得时间
  9. Centos下Nagios的安装与配置
  10. Itext 中的文本信息绝对定位