两种基本的搜索

搜索是个(暴力的)好东西,学一学还是很有必要滴~


首先就是DFS了,这是个东西

一般来说,它分为3个阶段:递归——>回溯——>dfs

DFS的过程就类似于走迷宫时死磕一条路,除非走到死胡同,不然一直走下去,并且它会把所有可走的路都走一遍,因此它的效率不高,所以我们通常会加一些优化。

最常用的是剪枝和记忆化

剪枝分为可行性剪枝和最优化剪枝

可行性剪枝就是看看当前的方案是否可行,如果不行,那后面的情况都不用考虑了,直接跳过

最优化剪枝就是看看当前的解与目前的最优解哪个更优,如果当前的解已经不比目前的最优解更优了,就直接跳过


模板:

void dfs(int k)
{
    if(k==n)//深度超过范围,找到一个解
    {
        //处理这个解
        return;
    }
    //扩展结点,如
    for(int i=1;i<=n;i++)
    {
        //处理结点
        //继续搜索,如
        dfs(k+1);
        //有些题需要恢复状态
    }
}


接着是BFS,这也是个东西

它用的是队列辅助,类似于在走迷宫时把当前的所有路记录下来(保存在队列中),之后再去走一走

BFS可以用启发式(如A*大法)优化,就是最乐观地估计当前的最好情况(这个最好情况一般会优于实际的最优解),如果即使是最好的情况也不能比当前的最优解更优,就直接跳过


模板之前放了一个,现在有点晚,我就不写了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值