BFS宽度搜索(队列)与DFS深度搜索(递归)
2016-08-08 10:03
465 查看
1;应用方面
——————bfs宽度搜索用于寻找最优解;
——————dfs深度搜索用于遍历寻找解;
2;实现原理;
——bfs;利用队列;层次来搜索的;
![](https://img-blog.csdn.net/20160808095819513)
解释一下图片;
第一层;–A;
第二层;–BCD;
第三层;–EF;
第四层;–GH;
第4层;–I;
因为他是按层搜索,就是说只要bfs搜索到结果那么一定是最优解;;
来个题目化的;将上图CI连接,求从A到I最短路径;依旧划分层次;第三层就会搜到I;也就是说bfs最先搜到的一定是最优 解;
模板;//结合上图理解代码;
——dfs;利用运用堆栈,递归层次搜索,回溯来遍历全部;
![](https://img-blog.csdn.net/20160808095944107)
解释一下图片;
利用回溯,一条道路走到底,然后返回上一级,继续进行搜索,直到搜索完毕;
模板;//结合上图理解代码;
——————bfs宽度搜索用于寻找最优解;
——————dfs深度搜索用于遍历寻找解;
2;实现原理;
——bfs;利用队列;层次来搜索的;
解释一下图片;
第一层;–A;
第二层;–BCD;
第三层;–EF;
第四层;–GH;
第4层;–I;
因为他是按层搜索,就是说只要bfs搜索到结果那么一定是最优解;;
来个题目化的;将上图CI连接,求从A到I最短路径;依旧划分层次;第三层就会搜到I;也就是说bfs最先搜到的一定是最优 解;
模板;//结合上图理解代码;
Q={起点s}; 标记s为己访问; while (Q非空) { 取Q队首元素u; u出队; 所有与u相邻且未被访问的点进入队列; 标记u为已访问; } //////////////////////////////////////////////////////////// whlie (队列不空) { u = 对队首元素; 首元素出队; for (所有与 u 邻接点 v) // u 的上 下 左 右 // if(v 的坐标在 row, col之内 // 并且 v 不是墙 // 并且 v 未被遍历) v 入队 }
——dfs;利用运用堆栈,递归层次搜索,回溯来遍历全部;
解释一下图片;
利用回溯,一条道路走到底,然后返回上一级,继续进行搜索,直到搜索完毕;
模板;//结合上图理解代码;
void DFS( Point P ){ for(所有P的邻接点K){ if(K未被访问){ 标记K; DFS(K); //有时候要清空之前的标记; } } }
相关文章推荐
- 数据结构和算法总结(一):广度优先搜索BFS和深度优先搜索DFS
- 深度优先搜索DFS和广度优先搜索BFS简单解析(新手向)
- 搜索分析(DFS、BFS、递归、记忆化搜索)
- 深度优先搜索DFS( 递归+非递归)
- 【数据结构】深度优先搜索BFS和广度优先搜索DFS
- DFS(深度搜索)——基于回溯法和递归
- 图的宽度优先搜索(BFS)以及C++队列知识复习
- 数据结构之 栈与队列--- 走迷宫(深度搜索dfs)
- 22.基于 邻接表 表示的 深度优先搜索dfs 和 广度优先搜索bfs
- 深度优先DFS和广度优先BFS的非递归实现
- 树的存储结构和图的存储结构以及图的深度优先DFS搜索和BFS广度优先搜索
- 算法之------深度优先搜索DFS和广度优先搜索BFS(最短路径)
- 深度优先搜索DFS/广度优先搜索BFS的一个应用实例(华为编程大赛赛题)
- 一道题看懂递归、(深度搜索)dfs、记忆化搜索、动态规划(DP)的差别!
- leetcode 139. Word Break 深度优先遍历DFS按照index递归搜索 + 很棒的动态规划DP做法
- bfs(队列实现)_dfs(递归以及显式栈实现)
- 深度优先搜索DFS和广度优先搜索BFS的总结
- 【BFS】广度优先搜索&【DFS】深度优先搜索
- 迷宫求解非递归 DFS BFS(应用栈和队列)
- 二叉树深度优先(DFS)和广度优先(BFS)算法的非递归实现