说明

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

规则如下:

  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. 转 The connection to adb is down, and a severe error
  2. R Learnilng 十八讲13-17
  3. libpcap-mmap分析(五)
  4. 大数据项目产品选型的五个建议
  5. STM32 之七 备份域(备份寄存器、备份SRAM)详解及数据丢失问题处理
  6. 适用于Linux / X11的Qt
  7. PHP 面向对象:类和对象
  8. Database2Sharp重要更新之完善EnterpriseLibrary架构代码
  9. Python 学习 DAY1
  10. [转载] Python 天气 简单 数据分析及可视化
  11. hbase 使用lzo_【hbase】Hbase最佳实践
  12. 嵌入式应用程序下载到ARM开发板后如何运行程序?
  13. Simulink之晶闸管(可控硅SCR)
  14. mac java 安装教程_mac 安装jdk1.8 附详细教程
  15. 国内常用的5个中文期刊论文网站,5个外文文献网站
  16. JMeter中BeanShell的使用方法和常用语法
  17. OutLook 2013 添加 USC gmail 邮箱 解决国内USC邮箱打不开
  18. Java程序监控工具
  19. 计算机无法对NAS硬盘操作,群晖NAS联机失败不要慌,我用经验告诉你,这样做就能完美解决...
  20. 阿里王坚眼中的互联网、数据和AI

热门文章

  1. 页面加载完就执行的设置?
  2. J 位操作练习 (Java)
  3. TouchVG 支持 CocoaPods 了!
  4. 深入理解React、Redux
  5. UI设计师——你是什么设计师?
  6. OSI参考模型与排错
  7. nagios搭建和邮件短信报警设置
  8. GMF:示例Mindmap 练习一
  9. IBM TSM官方最全资料
  10. 动态添加gridview行【转:http://www.cnblogs.com/oec2003/articles/1069796.html】