一、 八皇后问题?

在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法?

二、思路

1.首先如何解决递归问题呢?

 *找到递推公式*找到递归出口

2.那么递推公式是什么呢?
毫无疑问,第一个皇后在二维数组的第一行,第二个皇后在二维数组的第二行·········,那么递推公式就肯定是n+1 了;

3.递归出口是什么呢?

一共8个皇后,那出口肯定就是下到第八个皇后呗

4.考虑的细节都有哪些

1.如果要计算出所有的情况,那么肯定要使用回溯算法;如果我现在皇后所下的位置是第八行的第i列,如果此时发现该位置不满足情况,那我的i就要移动到i+1的位置,查看该位置是否符合情况;所以需要使用一个for循环对每一行进行遍历,当该皇后在该位置不满足情况时就向后移动一位;

2.如果我已经下到了第八个皇后,在该行遍历结束之后,会返回到上一个皇后的调用处,然后将上一个皇后的位置进行i+1;这就是回溯的体现

3.优化,可以使用一个全局共享的一维数组用来代替二维数组,下标代表第几行,数组数据代表皇后在每一行的第几个位置

4.需要一个判断函数,横竖斜线是否相遇

三、代码

package com.company;/*** @author:抱着鱼睡觉的喵喵* @date:2021/2/22* @description:*/
public class QueenEight {private int max = 8;private int[] arr = new int[max];private static int count = 0;public static void main(String[] args) {QueenEight queenEight = new QueenEight();queenEight.check(0);System.out.printf("一共有%d解法",count);}public void check(int n) {if (n == max) {print();return;}for (int i = 0; i < max; i++) {arr[n] = i;if (judge(n)) {check(n + 1);}}}public boolean judge(int n) {for (int i = 0; i < n; i++) {if (arr[n] == arr[i] || Math.abs(n - i) == Math.abs(arr[n] - arr[i])) {return false;}}return true;}public void print() {count++;for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] +" ");}System.out.println();}
}

使用回溯算法分析八皇后问题相关推荐

  1. 【算法】递归|迷宫回溯问题|八皇后问题

    [算法]递归|迷宫回溯问题|八皇后问题   迷宫回溯问题,要用动态的眼光来看待这个递归算法. package com.serein.recursion;/*** @author baichuan* @ ...

  2. 递归/回溯:八皇后问题N-Queens

    N皇后问题是计算机科学中最为经典的问题之一,该问题可追溯到1848年,由国 际西洋棋棋手马克斯·贝瑟尔于提出了8皇后问题. 将N个皇后放摆放在N*N的棋盘中,互相不可攻击,有多少种摆放方式,每种摆 放 ...

  3. 递归回溯解决八皇后问题

    文章目录 前言 八皇后问题 问题解析 代码实现 完整代码 前言 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题.该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇 ...

  4. 回溯算法(八皇后问题)

    写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...

  5. ACM:回溯,八皇后问题,素数环

    (一)八皇后问题 (1)回溯 #include <iostream> #include <string>#define MAXN 100using namespace std; ...

  6. 【Java数据结构与算法】第五章 递归、迷宫回溯和八皇后问题

    第五章 递归 文章目录 第五章 递归 一.递归 1.概念 2.代码实现 3.递归的规则 二.迷宫回溯 1.要求 2.代码实现 三.八皇后问题 1.介绍 2.思路 3.代码实现 一.递归 1.概念 简单 ...

  7. 回溯递归算法----八皇后问题

    前,有皇帝.就拿八皇后.由此产生的一系列问题,凌乱.由此产生的八皇后问题.哈哈 开玩笑~~~~ 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848 ...

  8. 学习笔记-回溯算法(八皇后问题)暴力法

    八皇后问题暴力解决法(介绍代码有说明) 先展示结果: 我这里用的是一维数组来展示的结果 array={7,3,0,2,5,1,6,4} 7的下标为0, 在这里下标+1表示的是第几个皇后也是行的位置,a ...

  9. 分治回溯算法----八皇后问题

    八皇后问题:在一个8×8的棋盘中,放入8个皇后棋子,要求同行同列同斜线不能有重复的皇后棋子,八皇后问题一共有92种解法.如图所示:即八皇后问题的一个解. //分治回溯算法解决八皇后问题 public ...

最新文章

  1. 我的本地化关于NSDefaults
  2. vb.net 功能f8键事件_Excel中F1~F12所有功能键作用,你知道吗?
  3. (15)javaScript入门
  4. JAVA线程池(ThreadPoolExecutor)源码分析
  5. php中文件下载,PHP中文件下载
  6. FactoryMethodPattern(工厂方法)
  7. Java打印三角形(双层for循环)
  8. django配置随时执行的脚本,使用运行时的manage环境执行程序
  9. 又一家公司被吃到上市了,每天卖出490吨辣条
  10. mysql群集配置_MySQL主主集群配置
  11. JSP Include 文件方式
  12. Python中的base64模块
  13. 跑跑卡丁车rush服务器维护,跑跑卡丁车rush+每日必做事情整理得丰富奖励
  14. 常见面试题之布隆过滤器的使用案例(海量数据)
  15. RecyclerView+自定义IndexBar实现自定义带索引的通讯录
  16. python函数ppt_如何用 Python 让你的PPT数据动起来
  17. ps界面为啥突然变大了_对新手非常友好的5个PS小技巧
  18. 【新书推荐】【2011.06】唐缺:不一样的推理密谋全集(套装共7册)
  19. 超详细零信任市场解读
  20. ❤️‍Spring从入门到大神--事务管理(搞笑漫画讲解!简单易懂!!)

热门文章

  1. 今日问题:操作必须使用一个可更新的查询。
  2. mysql 各种恢复_Mysql数据库备份和还原常用的命令
  3. 北京师范大学网络教育期末考试计算机,北京师范大学网络教育———《计算机应用基础》第二章同步练习题(4)...
  4. python3--htmltestrunner 日志显示_实时日志:Serverless Python 运行时支持日志实时输出...
  5. nginx https 访问http_Nginx之Http模块系列之访问控制模块
  6. lua与python结合_Lua和Python:实现一个高效的List对象(3)
  7. linux e盘路径,Linux添加路径到PATH环境变量
  8. mysql error 1231_解决ERROR 1231 (42000): Variable 'time_zone' can't
  9. oracle基础教程实验,Oracle 11g 基础教程与实验指导(配光盘)(清华电脑学堂)
  10. linux xshell上传文件夹,XShell上传文件到Linux服务器上