2019年4月14日-4月17日

近期的学习任务是DFS和BFS,之前因为对树一类的问题比较感兴趣去研究过,但现在学起来仍旧觉得很复杂,所以开始也没有去动手做题,明天再开始吧,每日的做题量也稍微加大一些,最近主要是在看各种资料。

一个是DFS的模板,俗称深搜

void DFS(状态A)
{
    if(A不合法)
        return 其父亲节点
    if(A为目标状态)
        输出(或者记录节点)
    if(A不为目标状态)
        DFS(A+¥)//调用递归
}

然后是BFS,宽搜
需要利用队列进行实现的

和深搜不同,广搜会将目前所有的状态的每一种子状态压缩进入队列记录,检查队列是否为空,如果不为空,将队首节点弹出,并且以此节点为“根节点”进行宽度搜索。

板子

q.push(head)
while(!q.empty())
{
    temp=q.front();
    q.pop();
    if(temp为目标状态)
        输出
    if(temp不合法)
        continue
    if(temp合法)
        q.push(temp+$) 将其所有子节点压入这个queue中
}

谈一下自己的感觉,较之之前的dp,代码变长了不少,dp难点是找到状态转移方程,搜索的关键是怎么去书写那个函数,两者其实还有点像,对我个人而言,搜索要比dp友善不少。

明天也要加油鸭!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值