八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种计算机语言可以解决此问题。---------以上节选自百度百科。

算法思考,初步思路:

构建二维int或者short型数组,内存中模拟棋盘

chess[r][c]=0表示:r行c列没有皇后,chess[r][c]=1表示:r行c列位置有一个皇后

从第一行第一列开始逐行摆放皇后

依题意每行只能有一个皇后,遂逐行摆放,每行一个皇后即可

摆放后立即调用一个验证函数(传递整个棋盘的数据),验证合理性,安全则摆放下一个,不安全则尝试摆放这一行的下一个位置,直至摆到棋盘边界

当这一行所有位置都无法保证皇后安全时,需要回退到上一行,清除上一行的摆放记录,并且在上一行尝试摆放下一位置的皇后(回溯算法的核心)

当摆放到最后一行,并且调用验证函数确定安全后,累积数自增1,表示有一个解成功算出

验证函数中,需要扫描当前摆放皇后的左上࿰

8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案(一)相关推荐

  1. 【C语言】算法学习·回溯算法

    目录 一.全排列问题 二.N 皇后问题 三.最后总结 回溯算法基本框架 解决一个回溯问题,实际上就是一个决策树的遍历过程.你只需要思考 3 个问题: 1.路径:也就是已经做出的选择. 2.选择列表:也 ...

  2. 一文了解贪心算法和回溯算法在前端中的应用

    一文了解贪心算法和回溯算法在前端中的应用 一.贪心算法 1.贪心算法是什么? 2.应用场景 3.场景剖析:零钱兑换 二.回溯算法 1.回溯算法是什么? 2.什么问题适合选用回溯算法解决? 2.应用场景 ...

  3. 常用十大算法 非递归二分查找、分治法、动态规划、贪心算法、回溯算法(骑士周游为例)、KMP、最小生成树算法:Prim、Kruskal、最短路径算法:Dijkstra、Floyd。

    十大算法 学完数据结构该学什么?当然是来巩固算法,下面介绍了十中比较常用的算法,希望能帮到大家. 包括:非递归二分查找.分治法.动态规划.贪心算法.回溯算法(骑士周游为例).KMP.最小生成树算法:P ...

  4. 常用算法总结(穷举法、贪心算法、递归与分治算法、回溯算法、数值概率算法)

    博主联系方式: QQ:1540984562 微信:wxid_nz49532kbh9u22 QQ交流群:892023501 目录 1.穷举法 2.贪心算法 3.递归与分治算法 4.回溯算法 5.数值概率 ...

  5. 回溯算法和贪心算法_回溯算法介绍

    回溯算法和贪心算法 回溯算法 (Backtracking Algorithms) Backtracking is a general algorithm for finding all (or som ...

  6. C++算法学习(回溯算法)

    回溯算法 1.目标 2.方法 3.具体思路 4.例题 (1)[力扣:10. 正则表达式匹配](https://leetcode-cn.com/problems/regular-expression-m ...

  7. java回溯算法_回溯算法讲解--适用于leetcode绝大多数回溯题目

    什么是回溯算法? 回溯法是一种系统搜索问题解空间的方法.为了实现回溯,需要给问题定义一个解空间. 说到底它是一种搜索算法.只是这里的搜索是在一个叫做解空间的地方搜索. 而往往所谓的dfs,bfs都是在 ...

  8. 【算法】回溯算法+进阶题——全排列Ⅱ、组合总和Ⅱ、解数独

    目录 一.前言 • 什么是回溯算法 • 用回溯能解决那些题型 二.总体思路 1. 通过树逐层解剖 2. 代码框架 3. 是否需要去重 三.例题 1. 组合总和Ⅱ 2. 全排列Ⅱ 3. 解数独 一.前言 ...

  9. python回溯算法_回溯算法经典问题及python代码实现

    2. 0-1背包问题 # 0-1 bag problem import sys def f(no, cur_mass, things, num): global cur_max if no == nu ...

  10. 常用十大算法_回溯算法

    回溯算法 回溯算法已经在前面详细的分析过了,详见猛击此处. 简单的讲: 回溯算法是一种局部暴力的枚举算法 循环中,若条件满足,进入递归,开启下一次流程,若条件不满足,就不进行递归,转而进行上一次流程. ...

最新文章

  1. centos 静态ip_CentOS 6 静态 IP 配置
  2. python date time
  3. Hadoop 2.x 完全分布式HA集群环境搭建
  4. 关于自动增涨外链的畅想
  5. 使用WeexSDK,网络请求信任证书的问题
  6. springboot主线程_Springboot对多线程的支持详解
  7. 10岁吊打职业教师的天才,仅用10篇论文称霸数学界160多年,40岁英年早逝却迄今无人超越...
  8. java反射的使用概览
  9. ajax静态加载图片,JQuery实现Ajax加载图片的方法
  10. 数据科学 IPython 笔记本 8.11 多个子图
  11. 第一回 钟碧诚 被迫上屋顶
  12. 计算机网络系统承接查验,智能化系统承接查验.doc
  13. 【CPRI】(2)组网方式及接口指标
  14. 时间序列分析中的增长率——同比与环比
  15. MYSQL中内连接与左(右)连接的区别
  16. 两岸四地消费者信心指数出炉:中国大陆消费者信心指数评析
  17. 一键体验 Istio
  18. 华为18级大牛倾情奉送:分布式服务框架和微服务设计原理实战文档,啃完发现涨薪如此简单
  19. C++语言程序设计第五版 - 郑莉(第四章课后习题)
  20. WPF datagrid数据导出到Excel表格

热门文章

  1. nodejs中使用worker_threads来创建新的线程
  2. java安全编码指南之:文件和共享目录的安全性
  3. JAVA 中无锁的线程安全整数 AtomicInteger介绍和使用
  4. 容器学习 之 容器的组件(三)
  5. ActiveMQ的network connectors部署集群(七)
  6. 详细解读CSS优先级——Web前端系列学习笔记
  7. 【终极办法!】idea没有import project解决办法
  8. 14行代码AC——习题5-4 交换学生(Foreign Exchange, UVa 10763)——解题报告
  9. 被忽略的知识点——switch语句
  10. [leetcode]160.相交链表