你知道“八皇后问题”吗?科普兵团胡杨网

棋类游戏因变化无穷、富有趣味和益智功能,受到很多人的喜爱,国际象棋是其中一种。除了休闲娱乐,国际象棋中还有一些趣味知识,如八皇后问题。

提起八皇后问题,我们就要讲到一个人——高斯。高斯是德国著名的数学家、物理学家和天文学家。他的兴趣爱好十分广泛,常常在工作之余独自一人下棋。不过,他的下法与众不同,其规则多数与他自己设计的一些数学问题有关。1850年,高斯又给自己提出了一个象棋问题:在国际象棋棋盘,即8*8的棋盘上放8个“皇后”,保证它们之间不能互相攻击,换言之,任意两后不能位于棋盘的同一行、同一列或同一对角线上,满足条件的放法有多少种?

其实,八皇后问题是一个经典的回溯算法问题。回溯法也称为试探法,这种方法是指暂时放弃关于问题规模大小的限制,并将问题的候选解按某种顺序逐一枚举和检验。当发现当前候选解不可能是解时,就选择下一个候选解。倘若当前候选解除了还不满足问题规模要求外,满足所有其他要求时,继续扩大当前候选解的规模,并继续试探。如果当前候选解满足包括问题规模在内的所有要求时,该候选解就是问题的一个解。在回溯法中,放弃当前候选解,寻找下一个候选解的过程称为回溯。扩大当前候选解的规模,以继续试探的过程称为向前试探。换言之,回溯法就是允许在选择失败的情况下,系统地去尝试完所有可能的选择。

因而,在分析八皇后问题时,用回溯法来解决问题是很合适的:从一个给定的位置出发有多种选择,但不知道究竟哪种选择才能解决问题。由于每一个皇后摆放的位置都受到前一个皇后落子位置的限制,所以越是最先落子的皇后,可选择的位置就越多,越后放的皇后,可选择的范围就越小。当我们选择采用回溯的方法解决八皇后问题时,先在棋盘上放上第1个皇后,然后再放上第2个,并保证第二个皇后和第一个不互相攻击。再接着放上第3个皇后,并满足她与前两个皇后都不会相互攻击的条件,依此类推,直到所有的皇后都摆放上去。假如第7个皇后放上后,第8个皇后已经没有安全的位置了,则要试着调整第7个皇后的位置,并再次调整第8个皇后的位置,看是否有安全的位置;如果第7个皇后的位置都已经尝试过而第8个皇后还没有安全的位置,则应试着调整第6个皇后的位置,重新调整第7、第8个皇后的位置。依此类推,并且有可能倒退到调整第1个皇后的位置。

所以,采用回溯的方法来解决八皇后问题,看似实现形式非常简单,实际上这一过程的工作量十分巨大,尤其是当八皇后问题扩展到更多的时候。

本作品为“科普中国-科学原理一点通”原创,转载时务请注明出处。

THE END
1.2024年12月17日随笔档案木偶人怪咖摘要: 题目 Description 众所周知, “八皇后” 问题是求解在国际象棋棋盘上摆放 8 个皇后,使得两两之间互不攻击的方案数。已经学习了很多算法的小蓝觉得 “八皇后” 问题太简单了,意犹末尽。作为一个国际象棋迷,他想研究在 N×M 的棋盘上,摆放 K 个马,使得两两之间互不攻击有多少种摆放方案。由阅读全文https://www.cnblogs.com/wzx-RS-STHN/p/archive/2024/12/17
2.八皇后问题算法详解八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不https://www.jianshu.com/p/4fa6e29449a5
3.C语言回溯法解八皇后问题(八皇后算法)C语言C语言回溯法解八皇后问题(八皇后算法)更新时间:2021年12月28日 08:47:54 作者:是八阿哥不是bug 这篇文章介绍了C语言回溯法解八皇后问题,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用!【 如果你想靠AI翻身https://www.jb51.net/article/233081.htm
4.八皇后问题的两种解法java八皇后问题java算法八皇后问题的两种解法java 八皇后问题java算法 本题主要考察递归回溯! 一维数组解决八皇后问题思路: 1.用一维数组中的索引表示皇后所在的行,一维数组中的每个值表示皇后所在的列;a[i]=val表示第i+1个皇后放在第i+1行的第val+1列。 例如:a[0]=0表示第1个皇后放在第1行第1列;https://blog.51cto.com/u_14457/6524567
5.经典回溯算法——八皇后问题经典回溯算法——八皇后问题 八皇后问题是由19世纪数学家“搞死先生”(高斯先生)提出的,具体的问题是这样的: 在国际象棋的棋盘中(有8×8格)摆放8个皇后,这八个皇后不能相互攻击到(皇后的攻击方向很广:横着,竖着,斜着都能攻击),即8个皇后不能处于同行、同列、同一正反对角线上,这样就不能相互攻击到了。那么https://www.nowcoder.com/discuss/83692
6.八皇后问题入门指南:解密棋盘上的策略艺术八皇后问题是19世纪数学家卡尔·冯·本德利提出的经典谜题,涉及在一个8x8的国际象棋棋盘上放置8个皇后,确保任意皇后都不位于同一行、列或对角线上。文章深入探讨了问题的基础理解,包括棋盘布局限制、攻击条件解析,以及为何穷举法不是最优解。通过介绍回溯算法,文章提供了解决八皇后问题的高效方法,并指导如何将理论知识https://www.imooc.com/article/347049
7.8种人工智能算法求解八皇后问题+原理分析2 AI算法 2.1 局部贪婪搜索 2.2 随机行走爬山法 2.3 首选爬山法 2.4 随机重启爬山法 2.5 模拟退火算法 2.6 局部束搜索 2.7 随机束搜索 2.8 遗传算法 3 结果展示 1 问题描述 八皇后问题——在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上。 https://developer.aliyun.com/article/889745
8.小朋友学经典算法(14):回溯法和八皇后问题腾讯云开发者社区算法是逐行安排皇后的,其参数row为现在正执行到第几行。n是皇后数,在八皇后问题里当然就是8啦。 if(row == n)这句代码好理解,如果程序执行了row == n,说明从0到n-1的位置都放上了皇后,那自然是找到了一种解法,于是八皇后问题解法数加1。 否则进入else语句。遍历所有列col,将当前col存储在数组c里,然后https://cloud.tencent.com/developer/article/1373221
9.JAVA实现的八皇后问题java8皇后资源java 八皇后算法 需积分: 34 95 浏览量 2013-07-24 上传 评论 1 收藏 2KB JAVA 举报 立即下载 开通VIP(低至0.43/天) 买1年送1年 用JAVA实现的八皇后问题。学习JAVA时练手写的程序,分享下。我真是各种喜欢写八皇后算法资源推荐 资源评论 Java实现八皇后问题 浏览:108 4星 · 用户满意度95% 用Javahttps://download.csdn.net/download/amber_amber/5809065
10.科学网—经典的算法回顾回溯法(backtracking)是穷尽搜索算法(Brute-force search)中的一种。回溯法采用试错的思想,它尝试分步的去解决一个问题。如十九世纪著名的数学家高斯1850年提出八皇后问题的回溯法求解。在分步解决问题的过程中,当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候,它将取消上一步甚至是上几步的计算,再通https://blog.sciencenet.cn/blog-315535-665392.html
11.算法学习与应用从入门到精通2.5.1 贪心算法基础 23 2.5.2 实践演练—解决“装箱” 问题24 2.5.3 实践演练—解决 “找零方案”问题 26 2.6 试探法算法思想 27 2.6.1 试探法算法基础 27 2.6.2 实践演练—解决 “八皇后”问题 28 2.6.3 实践演练—体彩29选 7彩票组合 29 2.7 迭代算法 30 2.7.1 迭代算法基础 30 2.7.2 实践演练—http://reader.hnlib.com/Book/Detail/377965
12.算法精粹:经典计算机科学问题的Python实现数字图书馆灯塔3.3 八皇后问题 3.4 单词搜索 3.5 字谜(SEND+MORE=MONEY) 3.6 电路板布局 3.7 现实世界的应用 3.8 习题 第4 章 图问题 4.1 地图就是图 4.2 搭建图的框架 4.3 查找最短路径 4.4 最小化网络构建成本 4.4.1 权重的处理 4.4.2 查找最小生成树 4.5 在加权图中查找最短路径 4.6 现实世界的应用 4.7 习题 https://www.dtdjzx.gov.cn/szlib/jykj/2817585.jhtml
13.算法精粹:经典计算机科学问题的Java实现PDF下载本书是一本面向中高级程序员的算法教程,借助Java语言,用经典的算法、编码技术和原理来求解计算机科学的一些经典问题。全书共10章,讲述了常见的搜索算法、常见的图算法、遗传算法、k均值聚类算法、简单的神经网络、对抗搜索算法等,通过丰富的方案、示例和习题展开具体实践。本书将计算机科学与应用程序、数据、性能等现实http://www.java1234.com/a/javabook/javabase/2024/0425/25187.html
14.《算法分析与设计》教学大纲第八章基于搜索的算法设计技术 1.教学基本要求 掌握利用回溯法解决问题的基本思想,并能用此方法解法实际的应用问题。 2.要求学生掌握的基本概念、理论、技能 通过本章教学使学生了回溯算法的设计思想、时间性能,能够用回溯法解决:n个皇后问题,图的m着色问题,批处理作业调度问题等,并能准确地分析回溯法的效率及稳定https://jsj.xxu.edu.cn/images/jxdg/jsjkxyjs/2013/0611102103.htm