递归算法学习系列之八皇后问题
2007-10-21 15:19
260 查看
1.引子
中国有一句古话,叫做“不撞南墙不回头",生动的说明了一个人的固执,有点贬义,但是在软件编程中,这种思路确是一种解决问题最简单的算法,它通过一种类似于蛮干的思路,一步一步地往前走,每走一步都更靠近目标结果一些,直到遇到障碍物,我们才考虑往回走。然后再继续尝试向前。通过这样的波浪式前进方法,最终达到目的地。当然整个过程需要很多往返,这样的前进方式,效率比较低下。
2.适用范围
适用于那些不存在简明的数学模型以阐明问题的本质,或者存在数学模型,但是难于实现的问题。
3.应用场景
在8*8国际象棋棋盘上,要求在每一行放置一个皇后,且能做到在竖方向,斜方向都没有冲突。国际象棋的棋盘如下图所示:
bool IsSafe(int col,int row,int[] queenList)
public bool PlaceQueue(int[] queenList, int col)
static void Main(string[] args)
{
{
{
{
{
{
{
{
{
Console.WriteLine("不能完成棋局,棋局失败!");
}
}
Console.Read();
}
递归算法PlaceQueue,完成这样的功能:它寻找第col列后的皇后的安全摆放位置,如果该函数返回了false,表示当前进入了死胡同,需要进行回溯,直到为0-7列都找
到了安全位置或者找遍这些列都找不到安全位置的时候终止。
用递归算法解决8皇后问题的示例程序:
/Files/jillzhang/EightQueens.rar
欢迎大家下载;
-----------------------------------------------------------------------------------------------------------------
递归算法到这篇为止,已经学习到了分而治之,动态编程,回溯等重要思想,也用这些问题解决了一些具体问题,比如排序,背包,8皇后问题等,通过对理论的学习
和对实际问题的解决,充分理解递归算法的使用方法。在编写学习系列的过程中,绝大多数都参考数据结构C++语言描述-应用标准模板库 ,特此感谢原书作者:
William Ford,William Topp,和译者陈军。
下一系列主要想通过6-8篇的篇幅来学习图论的基础知识。多谢大家支持
中国有一句古话,叫做“不撞南墙不回头",生动的说明了一个人的固执,有点贬义,但是在软件编程中,这种思路确是一种解决问题最简单的算法,它通过一种类似于蛮干的思路,一步一步地往前走,每走一步都更靠近目标结果一些,直到遇到障碍物,我们才考虑往回走。然后再继续尝试向前。通过这样的波浪式前进方法,最终达到目的地。当然整个过程需要很多往返,这样的前进方式,效率比较低下。
2.适用范围
适用于那些不存在简明的数学模型以阐明问题的本质,或者存在数学模型,但是难于实现的问题。
3.应用场景
在8*8国际象棋棋盘上,要求在每一行放置一个皇后,且能做到在竖方向,斜方向都没有冲突。国际象棋的棋盘如下图所示:
bool IsSafe(int col,int row,int[] queenList)
public bool PlaceQueue(int[] queenList, int col)
static void Main(string[] args)
{
{
{
{
{
{
{
{
{
Console.WriteLine("不能完成棋局,棋局失败!");
}
}
Console.Read();
}
递归算法PlaceQueue,完成这样的功能:它寻找第col列后的皇后的安全摆放位置,如果该函数返回了false,表示当前进入了死胡同,需要进行回溯,直到为0-7列都找
到了安全位置或者找遍这些列都找不到安全位置的时候终止。
用递归算法解决8皇后问题的示例程序:
/Files/jillzhang/EightQueens.rar
欢迎大家下载;
-----------------------------------------------------------------------------------------------------------------
递归算法到这篇为止,已经学习到了分而治之,动态编程,回溯等重要思想,也用这些问题解决了一些具体问题,比如排序,背包,8皇后问题等,通过对理论的学习
和对实际问题的解决,充分理解递归算法的使用方法。在编写学习系列的过程中,绝大多数都参考数据结构C++语言描述-应用标准模板库 ,特此感谢原书作者:
William Ford,William Topp,和译者陈军。
下一系列主要想通过6-8篇的篇幅来学习图论的基础知识。多谢大家支持
相关文章推荐
- 递归算法学习系列之八皇后问题
- 递归算法学习系列之八皇后问题
- 递归算法学习系列之经典背包问题
- 递归算法学习系列之经典背包问题
- 递归算法学习系列之经典背包问题
- 递归算法学习系列之经典背包问题
- 递归算法学习系列之经典背包问题
- 多线程学习系列三 多线程实现读者和写者问题
- supermap学习系列之silverlight--添加可拖拽的定位图钉(方法二之超图自带类(Pushpin、InfoWindow)) 续 解决上一篇的问题
- SpringMVC学习系列-后记 解决GET请求时中文乱码的问题
- 递归算法学习系列之八皇后问题
- SpringMVC学习系列-后记 解决GET请求时中文乱码的问题
- 学习ffmpeg.c过程中遇上的系列问题
- 分布式缓存技术redis学习系列(一)——redis简介以及linux上的安装以及操作redis问题整理
- Struts2框架学习系列(三) 数据在框架中的数据流转问题
- 分布式缓存技术redis学习系列(一)——redis简介以及linux上的安装以及操作redis问题整理
- Keras深度学习框架学习笔记系列(1)- IndentationError错误问题
- 递归算法学习系列二(归并排序)
- Linux 学习一 搭建环境系列之三 linux搭建django 以及搭建django时遇到的各种问题
- 本文专注于<递归算法和分治思想>[胖虎学习算法系列]