博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
递归,回溯,DFS,BFS的理解和模板【摘】
阅读量:6611 次
发布时间:2019-06-24

本文共 786 字,大约阅读时间需要 2 分钟。

 递归:就是出现这种情况的代码: (或者说是用到了栈)

解答树角度:在dfs遍历一棵解答树

优点:结构简洁
缺点:效率低,可能栈溢出

递归的一般结构:

1 void f() {2      if(符合边界条件) {3        ///4         return;5     }6     7      //某种形式的调用8      f();9 }

 

回溯:递归的一种,或者说是通过递归这种代码结构来实现回溯这个目的。回溯法可以被认为是一个有过剪枝的DFS过程。

解答树角度:带回溯的dfs遍历一棵解答树
回溯的一般结构:

1 void dfs(int 当前状态) { 2     if(当前状态为边界状态) { 3         记录或输出 4         return; 5     } 6     for(i=0;i

 

BFS和DFS是相似。

BFS(显式用队列)
DFS(隐式用栈)(即递归)
当然,对于DFS,用递归可能会造成栈溢出,所以也可以更改为显示栈。

1 void bfs(node &head) { 2     //将(起始)首节点加入队列 3     q.push(head); 4     //标记首节点已经被访问      5     isvisited[head]=true; 6      7     while(!q.empty()){ 8         int temp=q.front(); 9         q.pop();10         //访问temp,并标记temp已被访问过,将temp的子相关节点加入队列11         q.push(temp相关节点);12     }13 }

 

Reference:

转载于:https://www.cnblogs.com/linyx/p/3702831.html

你可能感兴趣的文章
oracle取前几行|中间几行|后几行
查看>>
16.1 Tomcat介绍
查看>>
QuickBI助你成为分析师——数据源FAQ小结
查看>>
十周三次课
查看>>
S/4HANA服务订单Service Order的批量创建
查看>>
2008 AD 复制有防火墙要开什么端口
查看>>
Find用法总结
查看>>
IT服务管理中的知识库建设
查看>>
【Lucene】Lucene通过CustomScoreQuery实现自定义评分
查看>>
linux 内核网络,数据接收流程图
查看>>
我的友情链接
查看>>
在windows下与linux虚拟机进行文件共享
查看>>
php 图形用户界面GUI 开发
查看>>
正则表达式详解
查看>>
linux文件与目录之权限对比
查看>>
LeetCode问题5
查看>>
AIX系列------ISO挂载
查看>>
如何打开被管理员禁止的注册表编辑器
查看>>
java根据经纬度计算距离
查看>>
Too many open files 问题的解决
查看>>