回溯算法的一些案例分析(c代码实现)

回溯算法是一种试探性的搜索解题方法,通过深度优先搜索解空间,并使用限界函数避免无效路径。文章介绍了八皇后问题,强调每个皇后必须在不同行、列和对角线上,通过定义数组来表示解空间,并使用递归实现深度优先搜索。在递归过程中,检查当前放置是否满足条件,若不满足则回溯尝试其他可能性。
摘要由CSDN通过智能技术生成

回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。用回溯算法解决问题的一般步骤为:
1、定义一个解空间,它包含问题的解。
2、利用适于搜索的方法组织解空间。//比如数组等
3、利用深度优先法搜索解空间。 //一般深度优先可以利用 递归实现
4、利用限界函数避免移动到不可能产生解的子空间。 //每次递归判断是否符合条件
问题的解空间通常是在搜索问题的解的过程中动态产生的,这是回溯算法的一个重要特性。
(copy网络)

第一个问题–八皇后问题
八皇后问题是十九世纪著名数学家高斯于1850年提出的。问题是:在8*8的棋盘上摆放8个皇后,使其不能互相攻击,即任意的两个皇后不能处在同意行,同一列,或同意斜线上。可以把八皇后问题拓展为n皇后问题,即在n*n的棋盘上摆放n个皇后,使其任意两个皇后都不能处于同一行、同一列或同一斜线上。

分析,八行,八个皇后,那么必然每一行有一个皇后,所以定义一个解空间,
比如一个数组,数组下标表示行数,元素表示每一行皇后所在的列数。上面是解空间,利用深度优先法搜索解空间,
本质上回溯就是穷举,只是多了一些条件,
每次在递归时,需要判断是否完整条件,

伪代码

map[];//解空间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值