您的位置:首页 > 其它

DFS和BFS

2016-07-27 16:13 169 查看
介绍:

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

类似于树的先根遍历
深搜例子:走迷宫,你没有办法用分身术来站在每个走过的位置。不撞南山不回头。

BFS:使用队列保存未被检测的结点。结点按照宽度优先的次序被访问和进、出队列。

类似于树的按层次遍历的过程
广搜例子:你的眼镜掉在地上以后,你趴在地板上找。你总是先摸最接近你的地方,如果没有,再摸远一点的地方……

使用范围:

DFS用来搜索是否能够到达目的地

BFS用来搜索最短路径或最小次数(因为BFS求得的结果就是最短或最小的)

DFS模板:

DFS(dep,…)  //dep代表目前DFS的深度
{
if (找到解||走不下去了)
{
…
return;
}

枚举下一种情况,DFS(dep+1,…)

}


BFS模板:

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


剪枝心得:

1,当限制条件为不大于k次时,要注意当等于k次时是否继续下去。例:连连看
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  DFS和BFS