DFS与BFS

一般来说用BFS解决的问题都可以用DFS来解决。

bfs=队列,入队列,出队列;dfs=栈,压栈,出栈

深度优先算法适合目标比较明确,以找到目标为主要目的的情况,例如走迷宫问题; 
广度优先算法适合在不断扩大遍历范围时找到相对最优解的情况,例如最短路问题。

但是其实在平时的题目中,并不会出现遍历一棵树这样的题目,因此,如何将其状态转化成树的节点,就尤其地重要。

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中
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值