“爆搜挂着机,打表出省一”,“爆搜”到底是个什么?【C++】

“骗分过样例,暴力出奇迹。爆搜挂着机,打表出省一。” ——只有OIer才能看懂的梗。

今天要讲的就是“爆搜挂着机”里的爆搜——DFS算法。

概述: DFS 是一种递归的搜索算法,其本质是通过递归地深入到问题的解空间中,直到找到目标解或无法继续深入为止。递归本身使用了函数调用栈来跟踪函数的执行和返回。

对于新手,了解递归和爆搜前,磨刀不误砍柴功,先了解其使用的数据结构,也就是栈。
在这里插入图片描述

栈是一种有记忆功能的数据结构。

记忆功能的实现在于栈会存储每一次入栈。存储特点是先进后出,就像一个箱子,最先拿出来的是放在最上面的东西,压箱底的是最后拿出来的。

入栈图示:

在这里插入图片描述

出栈图示:

在这里插入图片描述

有了这个概念后,我们看递归。

递归

递归将问题分解为无数个小问题,由于这个特性,在分治,回溯,DP算法中都有应用。

首先明确一点:递归不是循环!

往往循环到达 break 的条件时,循环就已经结束了,但当递归当前状态到达符合 return 的条件时,递归才刚刚开始。

void list(int s) {
   
    if(s > n) {
   
        printf("到达return条件。\n");
        return;
    }
    printf("%d\n", s);
    list(s + 1);
    printf("%d\n", s)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值