dfs 和 bfs 解析
2014-08-03 16:55
239 查看
dfs 和 bfs 解析
最近一直在看DFS和BFSDFS思想:
一直往深处走,直到找到解或者走不下去为止
DFS框架:
//dep代表目前DFS的深度 dfs(dep,…) { if ( 找到解 || 走不下去了) { … return; } 枚举下一种情况, DFS(dep+1,…); }
BFS思想:
1.从初始状态S开始,利用规则,生成下一层的状态。
2.顺序检查下一层的所有状态,看是否出现目标状态G。
否则就对该层所有状态节点,分别利用规则。生成再下一层的所有状态节点。
3.继续按上面思想生成再下一层的所有状态节点,这样一层一层往下展开。直到出现目标状态为止。
按层次的顺序来遍历搜索树
BFS框架
通常用队列(先进先出)实现
//s代表初始节点 bfs(Node s) { 初始化队列Q; Q.push(起点s); 标记s为己访问; while (Q非空) { 取Q队首元素u; u出队; if (u == 目标状态) { … } 所有与u相邻且未被访问的点进入队列; 标记u为已访问; } }
DFS:使用栈保存未被检测的结点,结点按照深度优先的次序被访问并依次被压入栈中,并以相反的次序出栈进行新的检测。
类似于树的先根遍历
深搜例子:走迷宫,你没有办法用分身术来站在每个走过的位置。不撞南山不回头。
BFS:使用队列保存未被检测的结点。结点按照宽度优先的次序被访问和进、出队列。
类似于树的按层次遍历的过程
广搜例子:你的眼镜掉在地上以后,你趴在地板上找。你总是先摸最接近你的地方,如果没有,再摸远一点的地方……
相关文章推荐
- 图的DFS和BFS算法解析
- 图的DFS和BFS算法解析
- 图的DFS和BFS算法解析
- 图的DFS和BFS算法解析
- 图的DFS和BFS算法解析
- 图的DFS和BFS算法解析
- 图的DFS和BFS算法解析
- 图的深度优先遍历(DFS)和广度优先遍历(BFS)--解析
- 图的DFS和BFS算法解析
- 图的DFS和BFS算法解析
- 图的DFS和BFS算法解析
- 图的DFS和BFS算法解析
- 图的DFS和BFS算法解析
- 图的DFS和BFS算法解析
- 深度优先搜索DFS和广度优先搜索BFS简单解析(新手向)
- 图的DFS和BFS算法解析
- 图的DFS和BFS算法解析
- 图的DFS和BFS算法解析
- 图的DFS和BFS算法解析
- 图的DFS和BFS算法解析