回溯法特点分析以及经典N皇后问题

本文介绍了回溯法的基本原理,包括如何通过约束函数和限界函数提高搜索效率。详细阐述了回溯法在解决子集树和排列树问题时的算法框架,并提供了N皇后问题的解法,通过类Queen实现,包含Place和Backtrack方法来寻找所有可能的解决方案。
摘要由CSDN通过智能技术生成

/*
以深度优先的方式系统地搜索问题的解的算法称为回溯法
它适用于解一些组合数较大的问题
*/
/*
在用回溯法搜索解空间树的时候,通常采用两种策略来避免无效搜索,提高回溯法的搜索效率
。其一是用约束函数在扩展结点处剪去不满足约束的子树,其二是用限界函数剪去不能得到最
优解的子树。这两类函数统称为剪枝函数。
运用回溯法的三个步骤:
(1)针对所给问题,定义问题的解空间
(2)确定易于搜索的解空间结构,子集树还是排列树
(3)以深度优先的方式搜索解空间,并且在搜索过程中用剪枝函数避免无效搜索

当所给的问题是从n个元素的集合S中找出满足某种性质的子集时,
相应的解空间树称为子集树。这类子集树通常有2^n个叶结点,其结点总个数为
2^(n+1)-1。遍历子集树的任何算法均需要2^n计算时间。

当所给的问题是确定n个元素满足某种性质的排列时,相应的解空间树称为
排列树。排列树通常有n!个叶结点。因此遍历排列树需要n!的计算时间。
*/

/*
回溯法搜集子集树的一般算法可描述如下:
*/
void Backtrack( int t )
{
 if ( t > n )
 {
  Output( x );
 }
 else
 {
  for( int i = 0; i <= 1; ++i )
  {
   x[t] = i;
   if ( Constraint(t) && Bound(t) )
   {
    Backtrack(t

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值