回溯法解决n皇后问题

本文详细介绍了如何运用回溯法解决N皇后问题,包括算法描述、解题步骤、算法框架以及具体的问题实例分析。通过深度优先搜索策略,结合剪枝函数避免无效搜索,确保每个皇后都不能在同一行、同一列或同一对角线上。同时提供了C语言的实现代码,以帮助理解算法的运作过程。
摘要由CSDN通过智能技术生成

1、算法描述:

        回溯法按深度优先策略搜索问题的解空间树。首先从根节点出发搜索解空间树,当算法搜索至解空间树的某一节点时,先利用剪枝函数判断该节点是否可行(即能得到问题的解)。如果不可行,则跳过对该节点为根的子树的搜索,逐层向其祖先节点回溯;否则,进入该子树,继续按深度优先策略搜索。(说白了就是从一条路往前走,能进则进,不能进则退回来,换一条路再试。

        回溯法的基本行为是搜索,搜索过程使用剪枝函数来为了避免无效的搜索。剪枝函数包括两类:1. 使用约束函数,剪去不满足约束条件的路径;2.使用限界函数,剪去不能得到最优解的路径。

2、用回溯法解题的一般步骤:

 (1)针对所给问题,确定问题的解空间:

        首先应明确定义问题的解空间,问题的解空间应至少包含问题的一个(最优)解。

 (2)确定结点的扩展搜索规则

 (3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。

3、算法框架

(1)问题框架

   设问题的解是一个n维向量(a1,a2,………,an),约束条件是ai(i=1,2,3,…..,n)之间满足某种条件,记为f(ai)。

(2)非递归回溯框架

   1:int a[n],i;
   2: 初始化数组a[];
   3: i = 1;
   4: while (i>0(有路可走)   and  (未达到目标))  // 还未回溯到头
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值