DFS BFS 搜索总结
来源:互联网 发布:闹钟软件哪个好 编辑:程序博客网 时间:2024/05/22 01:38
做了好多天的搜索,今天来总结下。
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 搜索总结
- 搜索 (bfs,dfs) 总结
- bfs和dfs搜索总结
- BFS,DFS等搜索题目总结
- [搜索]DFS+BFS
- DFS、BFS搜索+题目
- DFS/BFS 搜索训练
- DFS BFS 搜索基础
- 搜索bfs/dfs
- DFS,BFS算法总结
- BFS与DFS总结
- 总结之bfs,dfs
- poj 3083 搜索 DFS,BFS
- 搜索问题:DFS 与 BFS
- poj3083 dfs+bfs搜索迷宫
- DFS 与BFS优先搜索
- 博弈搜索练习-BFS&DFS
- 深度优先搜索DFS和广度优先搜索BFS的总结
- CI框架中的site_url()与base_url()
- jsp学习
- Pascal 技巧
- IDL中与文件相关的函数和过程
- eCos timer封装成linux kernel风格
- DFS BFS 搜索总结
- Out of Hay
- POJ
- 题目1002:Grading
- 输入行数,打印出相应行数的*直角三角形
- CSDN博客积分规则和获取积分方法
- 日常学习2017.7.21
- UVA 10905 Children's Game
- 36