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

DFS(深搜的同时考虑回溯)

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

bfs是按一层一层来访问的,所以适合有目标求最短路的步数,你想想层层搜索每次层就代表了一步。bfs优先访问的是兄弟节点,只有这一层全部访问完才能访问下一层,也就是说bfs第几层就代表当前可以走到的位置(结点).而dfs是按递归来实现的,它优先搜索深度,再回溯,优先访问的是没有访问过的子节点

DFS多用于连通性问题因为其运行思想与人脑的思维很相似,故解决连通性问题更自然。BFS多用于解决最短路问题,其运行过程中需要储存每一层的信息,所以其运行时需要储存的信息量较大,如果人脑也可储存大量信息的话,理论上人脑也可运行BFS。
总的来说多数情况下运行BFS所需的内存会大于DFS需要的内存(DFS一次访问一条路,BFS一次访问多条路),DFS容易爆栈(栈不易"控制"),BFS通过控制队列可以很好解决"爆队列"风险。
它们两者间各自的优势需要通过实际的问题来具体分析,根据它们各自的特点来应用于不同的问题中才能获得最优的性能。

最新文章

  1. java中获取接口(方法)中的参数名字(eclipse设置编译参数)(java8 javac -parameters)
  2. The Rotation Game(IDA*算法)
  3. September 27th 2016 Week 40th Tuesday
  4. Eclipse导出可执行Jar文件(包含第三方Jar包)
  5. poj 2192 (DP)
  6. redis 在windows上运行
  7. java设计模式--行为型模式--迭代模式
  8. adb 卸载android系统程序
  9. Android NDK and OpenCV Development With Android Studio
  10. 人工智能一:Al学习路线
  11. springboot测试、打包、部署
  12. 1python简介
  13. Java的hashCode和equals方法
  14. Linux的JDK配置
  15. POJ2061 Subsequence 2017-05-25 19:49 83人阅读 评论(0) 收藏
  16. 『编程题全队』Alpha阶段事后诸葛亮分析
  17. 促使团队紧密协作[高效能程序员的修炼-N1]
  18. Eclipse cdt debug时‘Error while launching command: gdb.exe --version’
  19. 【C#高级编程】笔记之核心C#
  20. IOS版微信小视频导出方法

热门文章

  1. c++编程规范的纲要和记录 (转)
  2. camera按键采集图像及waitKey的用法
  3. 配置mysql主从数据库
  4. 02: MySQL的安装与基本配置
  5. 20145101《Java程序设计》第10周学习总结
  6. 20145322 Exp5 MS08_067漏洞测试
  7. Android灯光系统--通知灯深入分析
  8. 1-20 RHEL7的启动原理和服务控制
  9. (转)Spring Boot(一)
  10. C#用Linq查询Combox的数据源