您的位置:首页 > 其它

递归算法学习系列之八皇后问题

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篇的篇幅来学习图论的基础知识。多谢大家支持
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: