您当前的位置: 首页 > 

BFS与DFS总结

发布时间:2014-07-20 23:05:10 ,浏览量:3

最近一直在看DFS和BFS,感觉要晕的GJ.

DFS思想: 一直往深处走,直到找到解或者走不下去为止

DFS框架: DFS(dep,…)  //dep代表目前DFS的深度 {       if (找到解||走不下去了)        { … return;       }        枚举下一种情况,DFS(dep+1,…) }

BFS思想:

1.从初始状态S开始,利用规则,生成下一层的状态。 2.顺序检查下一层的所有状态,看是否出现目标状态G。 否则就对该层所有状态节点,分别利用规则。生成再下一层的所有状   态节点。 3.继续按上面思想生成再下一层的所有状态节点,这样一层一层往下展开。直到出现目标状态为止。 按层次的顺序来遍历搜索树

BFS框架

通常用队列(先进先出,FIFO)实现 初始化队列Q. Q={起点s}; 标记s为己访问; while (Q非空) { 取Q队首元素u; u出队; if (u == 目标状态) {…} 所有与u相邻且未被访问的点进入队列; 标记u为已访问; }

DFS:使用栈保存未被检测的结点,结点按照深度优先的次序被访问并依次被压入栈中,并以相反的次序出栈进行新的检测。 

类似于树的先根遍历 深搜例子:走迷宫,你没有办法用分身术来站在每个走过的位置。不撞南山不回头。 BFS:使用队列保存未被检测的结点。结点按照宽度优先的次序被访问和进、出队列。 类似于树的按层次遍历的过程 广搜例子:你的眼镜掉在地上以后,你趴在地板上找。你总是先摸最接近你的地方,如果没有,再摸远一点的地方……

关注
打赏
1688896170
查看更多评论

暂无认证

  • 3浏览

    0关注

    110425博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0552s