搜索专题(一)

 

搜索的种类:

搜索用很多实用和高效的算法。

举个栗子:广度优先搜索(bfs),深度优先搜索(dfs),枚举大法,蒙特卡洛树等等——详见百度百科《搜索算法》。

 

常用搜索简介:

广度优先搜索:

广度优先搜索,又称宽度优先搜索,简称广搜或宽搜。从当前位置开始进行四面八方搜索。

深度优先搜索:

深度优先搜索,简称深搜。与广度优先搜索相反,从当前位置一直向前搜索,知道不能搜索再改变方向。

枚举:

枚举,通过字面意思可知。就是将所有需要搜索的内容搜索过去,也是最暴力的算法,通常用于基础的枚举题中。

 

深搜、回溯:

回溯应该算是深搜的一种,准确地说它可以通过深搜来实现。

来一道经典到不能再经典的回溯例题:

八皇后问题:

——by USACO

题目描述(大意):

在一个8*8的棋盘上放置8个皇后,每个皇后都能攻击自己所在的行、列及两条对角线上的其他皇后。我们在保证每个皇后安全的情况下,计算出放置皇后的方案数。

题目思路如下:

通过放置每一个皇后来进去深度优先搜索,并判断没用皇后可以攻击,如果会攻击到其他皇后就回溯一步。直到道将八个皇后全部放置完毕后输出。

代码实现(伪):

int b[N],c[N],d[N];//分别表示列和两条对角线。

 

inline void outo()

{

    .....//输出不解释

}

 

inline void dfs(int k)//表示递归到的层数

{

    if(k==9)//放置完了八个皇后

    {

        outo();//输出

        return ;//返回,这里的空格可以不加,按照个人的喜好来。

    }

    if(!b[i] && !c[i+j+7] && !d[i-j+7])//+7是为了避免出现数组中下标负数的情况。

    {b[i]=1,c[i+j+7]=1,d[i-j+7]=1;dfs(k+1);}//保存结果并继续递归

    b[i]=0;c[i+j+7]=0;d[i-j+7]=0;//回溯一步

}

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值