宽度优先搜索与深度优先搜索
来源:互联网 发布:c语言取反加一 编辑:程序博客网 时间:2024/05/20 02:30
宽度优先搜索算法顺序:1-2-3-4-5-6-7
深度优先搜索算法顺序:1-2-4-5-3-6-7
宽度优先搜索算法(又称广度优先搜索)BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。
structNode{intx;inty;intstep;Node(intx1,inty1,intstep1):x(x1),y(y1),step(step1){}};intBFS(){Nodenode(0,0,0);queue<Node>q;while(!q.empty())q.pop();q.push(node);while(!q.empty()){node=q.front();q.pop();if(node.x==n-1&&node.y==n-1){returnnode.step;}visit[node.x][node.y]=1;for(inti=0;i<4;i++){intx=node.x+stepArr[i][0];inty=node.y+stepArr[i][1];if(x>=0&&y>=0&&x<n&&y<n&&visit[x][y]==0&&mazeArr[x][y]==0){visit[x][y]=1;Nodenext(x,y,node.step+1);q.push(next);}}}return-1;}
深度优先搜索用栈(stack)来实现,整个过程可以想象成一个倒立的树形:
1、把根节点压入栈中。
2、每次从栈中弹出一个元素,搜索所有在它下一级的元素,把这些元素压入栈中。并把这个元素记为它下一级元素的前驱。
3、找到所要找的元素时结束程序。
4、如果遍历整个树还没有找到,结束程序。
广度优先搜索使用队列(queue)来实现,整个过程也可以看做一个倒立的树形:
1、把根节点放到队列的末尾。
2、每次从队列的头部取出一个元素,查看这个元素所有的下一级元素,把它们放到队列的末尾。并把这个元素记为它下一级元素的前驱。
3、找到所要找的元素时结束程序。
4、如果遍历整个树还没有找到,结束程序。
深度优先搜索算法(Depth-First-Search),是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。属于盲目搜索。利用深度优先搜索算法可以产生目标图的相应拓扑排序表,利用拓扑排序表可以方便的解决很多相关的图论问题,如最大路径问题等等。
0 0
- 深度优先搜索与宽度优先搜索
- 宽度优先搜索与深度优先搜索
- 深度优先搜索与宽度优先搜索的知识点归纳
- 深度优先搜索与广度优先搜索
- 深度优先搜索与广度优先搜索
- 广度优先搜索与深度优先搜索
- 深度优先搜索与广度优先搜索
- 广度优先搜索与深度优先搜索
- 深度优先搜索与广度优先搜索
- 深度优先搜索与广度优先搜索
- 深度优先搜索与广度优先搜索 .
- 深度优先搜索与广度优先搜索
- 深度优先搜索与广度优先搜索
- 深度优先搜索与广度优先搜索
- 深度优先搜索与广度优先搜索
- 深度优先搜索与广度优先搜索
- 广度优先搜索与深度优先搜索
- 深度优先搜索与广度优先搜索
- 如何访问github上的HTML代码对应的页面。
- JAVA8 十大新特性详解
- Zookeeper分布式队列的实现
- android Activity管理类(全局管理Activity)
- 每周荐书:SLAM、Vue2、爬虫(评论送书)
- 宽度优先搜索与深度优先搜索
- 动态库链接问题解决
- POJ 1947 Rebuilding Roads 树形dp+01背包
- layui里的弹出框问题
- 04_mysql文本协议
- 让系统更清晰——解构复杂系统的五种常用模型
- Spring mvc 单个@RequestMapping返回特定Content-Type的配置
- js进阶02、构造函数的继承者们
- java基础5