一,问题描述
在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
二,分析
采用逐步试探的方式,先从一个方向往前走,能进则进,不能进则退并尝试另外的路径。首先我们来分析一下国际象棋的规则,这些规则能够限制我们的前进,也就是我们前进途中的障碍物。一个皇后q(x,y)能被满足以下条件的皇后q(row,col)吃掉
1)x=row(纵向不能有两个皇后)
2) y=col(横向不能有两个皇后)
3)col + row = y+x;(斜向正方向)
4)col - row = y-x;(斜向反方向)
遇到上述问题之一的时候,说明我们已经遇到了障碍,不能继续向前了。我们需要退回来,尝试其他路径。
我们将棋盘看作是一个8*8的数组,这样可以使用一种蛮干的思路去解决这个问题,这样我们就是在8*8=64个格子中取出8个的组合,C(64,8) = 4426165368,显然这个数非常大,在蛮干的基础上我们可以增加回溯,从第0列开始,我们逐列进行,从第0行到第7行找到一个不受任何已经现有皇后攻击的位置。

前面四列的摆放如上图则 第五列,我们会发现找不到皇后的安全位置
第五列的时候,摆放任何行都会受到上图所示已经存在的皇后的攻击,这时候我们认为我们撞了南墙了,是回头的时候了,我们后退一列,将原来摆放在第四列的皇后
(3,4)拿走,从(3,4)这个位置开始,我们在第四列中寻找下一个安全位置为(7,4),再继续到第五列,发现第五列仍然没有安全位置,回溯到第四列,此时第四列也是一个死胡同了,我们再回溯到第三列,这样前进几步,回退一步,最终直到在第8列上找到一个安全位置(成功)或者第一列已经是死胡同,但是第8列仍然没有找到安全位置为止
总结一下,用回溯的方法解决8皇后问题的步骤为:
1>从第一列开始,为皇后找到安全位置,然后跳到下一列
2>如果在第n列出现死胡同,如果该列为第一列,棋局失败,否则后退到上一列,在进行回溯
3>如果在第8列上找到了安全位置,则棋局成功。
三,源码(精选自网友解答)
回溯法非递归
更牛解答
分享到:
相关推荐
回溯法和分支限界法常用于解决组合优化问题,如八皇后问题、N皇后问题、旅行商问题等。这两种方法通过试探性地构建解决方案并适时回退或剪枝,来寻找全局最优解。 最后,递归是许多算法的基础,它能够简化代码结构...
它主要用于解决组合优化问题,如迷宫求解、八皇后问题、数独等。在本压缩包中,我们有两个文件:`回溯算法复习.cpp` 和 `回溯算法-迷宫问题.txt`,它们分别提供了源代码实现和对源码的理解。 源码文件 `回溯算法...
- **递归与回溯**:递归函数的设计,如斐波那契数列、八皇后问题等,以及回溯法在解决组合优化问题中的应用。 - **图论与网络流**:最大流问题、最小割问题及其在电路设计、资源分配等问题中的应用。 - **计算几何...
此外,回溯法和分支限界法是解决组合优化问题的常用策略,如八皇后问题、N皇后问题、旅行商问题等。它们通过试错和剪枝来寻找所有可能的解决方案或最优解。 数据结构与算法的结合至关重要。链表、队列、栈、堆、...
6. **回溯法与分支限界法**:用于解决组合优化问题,如八皇后问题、N皇后问题等,通过尝试所有可能的解决方案,但一旦发现不满足条件则回溯。 7. **排序与查找算法的优化**:如堆排序、基数排序、二叉查找树等,...
这些作业涵盖了基础的编程概念、多态性应用以及一个经典的算法问题——八皇后问题。下面我们将深入探讨其中涉及的Java知识点。 1. **HelloWorld**: "HelloWorld"是每个编程初学者的第一步,它展示了如何在Java中...
- **回溯法**:尝试所有可能的解决方案,遇到错误时返回,如八皇后问题、图的着色问题。 - **分支限界法**:类似于回溯,但使用剪枝技术提前排除无效解,如旅行商问题。 2. **时间复杂度和空间复杂度分析**: - ...
5. **回溯法与分支限界**:在解决组合优化问题中常用,如八皇后问题、N皇后问题、旅行商问题等。 6. **概率算法和随机化**:如Monte Carlo方法、Las Vegas方法,用于处理NP难问题或提高算法效率。 7. **计算几何**...
- 适用于解决组合问题,如八皇后问题。 #### 六、算法设计与分析实例 1. **实例参考**:通过具体的题目练习,如山东大学软件学院2024年算法设计与分析期末题,加深对算法设计与分析的理解和应用能力。 #### 七、...
- **回溯法**:用于解决约束满足问题,如八皇后问题、数独问题等。 - **分支限界法**:优化回溯法,通过剪枝减少无效搜索。 7. **贪心策略** - **局部最优解**:每次选取当前最优解,如霍夫曼编码、活动选择问题...
西电的算法课程复习资料,包含课件,自己整理的笔记和考题记录。 课程内容如下: 八大排序的详细讲解,求解递归式的复杂度,常用的几种算法和典例...回溯的有全排列,N皇后等,还分享了自己的期末复习总结和考试总结。
这两类算法主要用于解决组合优化问题,如八皇后问题、旅行商问题等。回溯法通过试错的方式搜索解空间,分支限界法则采用剪枝策略减少搜索范围。 九、数据结构基础 数据结构是算法设计的基础,包括数组、链表、栈、...
7. EightQueensPuzzle:八皇后问题,经典的回溯算法应用,通过放置八个皇后在棋盘上,使得每个皇后都不能攻击到其他皇后。 8. FlightInformation:航班信息处理,可能涉及到数据结构和算法在实际问题中的应用,如...
6. **回溯法与分支限界法**:在解决组合优化问题如八皇后问题、旅行商问题时,这两种方法常常被使用。 7. **图论算法**:包括图的遍历(深度优先搜索和广度优先搜索)、最短路径算法(Dijkstra、Floyd-Warshall、...
5. **递归与回溯**:理解递归的基本原理,掌握递归函数的设计,以及在解决组合优化问题(如八皇后问题、N皇后问题)中的回溯算法。 6. **字符串处理**:KMP算法、Boyer-Moore算法、Rabin-Karp算法等在字符串匹配中...
7. **回溯法与分支限界法**: 用于解决组合优化问题,如八皇后问题、N皇后问题、旅行商问题等。通过试错和剪枝来避免无效搜索。 8. **随机化算法**: 如鸽巢原理、线性探测法、Hash函数等,随机化算法在解决一些计算...
10. **回溯法与分支限界法**:用于搜索所有可能解的方法,如八皇后问题、数独求解等。 11. **近似算法与随机化算法**:对于NP难问题,往往需要设计近似算法寻找接近最优解的解决方案。随机化算法则引入随机因素,如...
回溯法和分支限界法用于在搜索空间中寻找解决方案,常见于解决组合优化问题,如八皇后问题。 算法分析主要包括时间复杂度和空间复杂度的计算。时间复杂度描述了算法运行时间随输入规模增长的速度,常用的大O表示法...
常见于解决约束满足问题,如八皇后问题、迷宫问题等。 - 在设计回溯法时,需要明确问题的状态结构、定义解的状态空间树,以及设置搜索和回溯规则。 以上内容概述了算法设计与分析课程的关键知识点,包括时间复杂度...
- **回溯**:尝试所有可能的解决方案,遇到错误时退回重新选择,如八皇后问题。 - **分治限界**:用于解决具有固定结构的问题,如Kruskal算法。 6. **Ackermann函数**: - Ackermann函数是递归函数,通常用作...