DFS BFS 搜索总结
2017-07-21 08:34
323 查看
做了好多天的搜索,今天来总结下。
DFS 与 BFS
DFS:深度优先搜索:利用栈这种数据结构来实现(利用递归便于实现,但是效率较低),找到的第一个解不一定是最优解,只是先序遍历最早的可行解。
BFS:广度优先搜索:利用队列这种数据结构来实现,找到的第一个解经常都是最优解(如迷宫的最短路径),但是不常用来求所有解(重复的次优解常常都被剪枝剪掉了)。
BFS的算法时间复杂度要比DFS小,而且BFS是寻找到目标状态就完成,而DFS是一直寻找到目标状态的所有方法,所以二者各有应用。
同学告诉我:BFS比较稳健,DFS在“迷宫”种一直找来找去,很容易造成死循环,而且需要剪枝
例:跳马问题问是否可以从起始点到结束点 BFS的算法较快
http://blog.csdn.net/deepseazbw/article/details/75504277
单个的从起始状态到目标状态 BFS
http://blog.csdn.net/deepseazbw/article/details/75270182
但是涉及到了搜索到的个数问题这时候用 DFS
http://blog.csdn.net/deepseazbw/article/details/75453355
多个从起始状态到目标状态是否完成 DFS
http://blog.csdn.net/deepseazbw/article/details/75581424
http://blog.csdn.net/deepseazbw/article/details/75453339
涉及到搜索问题很多将会采用方向数组,数组的定义根据棋盘问题的不同裁定,
1. 正常的上下左右移动
2.跳马的8个方向移动
3.连通部分的8个方向移动
DFS 与 BFS
DFS:深度优先搜索:利用栈这种数据结构来实现(利用递归便于实现,但是效率较低),找到的第一个解不一定是最优解,只是先序遍历最早的可行解。
BFS:广度优先搜索:利用队列这种数据结构来实现,找到的第一个解经常都是最优解(如迷宫的最短路径),但是不常用来求所有解(重复的次优解常常都被剪枝剪掉了)。
void DFS(int y)//DFS第y行 { if(y==n) cnt++; for(int i=0;i<n;i++) if(ok(y,i)){ //判断是否越界也可以加入剪枝条件 map[y][i]=1; //放在这 DFS(y+1); map[y][i]=0; //不放这 }
void BFS () { queue Q; Q.push(startState);//初始状态的压入 while(!Q.empty) //队列不为空 { curState=Q.front(); //取队头 if(curState == endState) //判断是否达到终止条件 return true; exState=extend(curState);//利用方向数组得到扩展状态 if(!mark[exState]) // 判重与剪枝 { Q.push(exState); //将扩展状态压入 mark[curState]=true;//标记 } } }
BFS的算法时间复杂度要比DFS小,而且BFS是寻找到目标状态就完成,而DFS是一直寻找到目标状态的所有方法,所以二者各有应用。
同学告诉我:BFS比较稳健,DFS在“迷宫”种一直找来找去,很容易造成死循环,而且需要剪枝
例:跳马问题问是否可以从起始点到结束点 BFS的算法较快
http://blog.csdn.net/deepseazbw/article/details/75504277
单个的从起始状态到目标状态 BFS
http://blog.csdn.net/deepseazbw/article/details/75270182
但是涉及到了搜索到的个数问题这时候用 DFS
http://blog.csdn.net/deepseazbw/article/details/75453355
多个从起始状态到目标状态是否完成 DFS
http://blog.csdn.net/deepseazbw/article/details/75581424
http://blog.csdn.net/deepseazbw/article/details/75453339
涉及到搜索问题很多将会采用方向数组,数组的定义根据棋盘问题的不同裁定,
1. 正常的上下左右移动
2.跳马的8个方向移动
3.连通部分的8个方向移动
相关文章推荐
- 深度优先搜索DFS和广度优先搜索BFS的总结
- DFS BFS 搜索总结
- DFS BFS 搜索总结
- 算法总结(12)--dfs, bfs记忆化, 减少不必要的搜索
- DFS BFS 搜索总结
- DFS BFS 搜索总结
- DFS BFS 搜索总结
- DFS BFS 搜索总结
- 搜索 (bfs,dfs) 总结
- 搜索总结 - DFS&BFS&DBFS框架
- HDOJ-1253 基础搜索问题总结[DFS()+BFS()]
- bfs和dfs搜索总结
- 数据结构和算法总结(一):广度优先搜索BFS和深度优先搜索DFS
- POJ 3083 Children of the Candy Corn DFS及BFS搜索
- POJ1252 完全背包 dp 搜索 dfs bfs
- 深度优先搜索DFS/广度优先搜索BFS的一个应用实例(华为编程大赛赛题)
- DFS、BFS搜索+题目
- hdu 1181 (搜索BFS,深搜DFS,并查集)
- 广度优先搜索BFS-C实现、思路、解析和总结
- 蓝桥杯---剪格子(DFS&BFS)(小总结)