首页 > 其他 > 详细

DFS+BFS题目一百例——从入门到入土

时间:2019-03-28 16:58:19      阅读:110      评论:0      收藏:0      [点我收藏+]

标题是假的,题目自己找,这里只有一些想法。

DFS借助递归(堆栈)实现,递归的参数尽量精简,一般包括递归层级和当前状态。为了方便记忆化搜索,参数尽量简洁,可以借助全局变量减少参数。

利用递归(堆栈)的性质(FILO),进行状态标记,用完当前的状态后就当无事发生,就像渣男一样。

vis[i]=1;//改变当前状态
dfs(t+1);//压入堆栈
vis[i]=0;//就当无事发生

BFS借助队列实现,队列的参数为合适的结构体,参数和DFS类似。类似的,能用全局变量就不要加入结构体。

利用递归(堆栈)的性质(FIFO),进行状态标记,用完当前的状态后就当无事发生,就像渣男一样。

tmp=pre=qu.top();//两个结构变量tmp,pre
qu.pop();
tmp.x++;//改变当前状态
qu.push(tmp);//压入队列
tmp=pre;//就当无事发生

对比发现上面的过程都差不多,DFS以递归的形式省下了几行堆栈操作的代码。

简单的DFS和BFS都只会经过一遍所有的路径,所以时间复杂度都是O(N)。(N为状态总数,以长为a宽为b的矩阵为例,N=ab)

然而,由于BFS一层一层搜索的性质,寻找“最短”、“最快”、“最少”的条件更加方便,和一些最短路算法联系紧密。

类似的,由于DFS从头到尾搜索的性质,更适合用在连通性问题中,和并查集联系紧密。

做题之余,不妨(必须)思考一下二者的异同。

DFS和BFS,堆栈和队列,那么和递归同等的又是什么呢?

DFS+BFS题目一百例——从入门到入土

原文:https://www.cnblogs.com/World-of-Hile/p/10615763.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!