[C++]广度优先搜索(含C++模板)
来源:互联网 发布:淘宝接单的app都有哪些 编辑:程序博客网 时间:2024/06/16 04:39
广度优先搜索(含C++模板)
宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。
概述
BFS,其英文全称是Breadth First Search。 BFS并不使用经验法则算法。从算法的观点,所有因为展开节点而得到的子节点都会被加进一个先进先出的队列中。一般的实验里,其邻居节点尚未被检验过的节点会被放置在一个被称为 open 的容器中(例如队列或是链表),而被检验过的节点则被放置在被称为 closed 的容器中。(open-closed表)
算法描述
广度优先搜索使用队列(queue)来实现,整个过程也可以看做一个倒立的树形:
- 1、把根节点放到队列的末尾。
- 2、每次从队列的头部取出一个元素,查看这个元素所有的下一级元素,把它们放到队列的末尾。并把这个元素记为它下一级元素的前驱。
- 3、找到所要找的元素时结束程序。
- 4、如果遍历整个树还没有找到,结束程序。
对于不同的行走条件只需要改变node_array的参数即可。
//// main.cpp// work//// Created by 颜泽鑫 on 5/20/16.// Copyright © 2016 颜泽鑫. All rights reserved.//#include <iostream>#include <queue>using namespace std;int map[22][22] = {0};struct node { int x; int y; int step; node(int _x = 0, int _y = 0, int _step = 0) : x(_x), y(_y), step(_step) { }};node final = node();node start = node();int node_array[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};int visited[22][22] = {0};int find_map(int row, int col) { queue<node> queue_node; while (!queue_node.empty()) { queue_node.pop(); } queue_node.push(start); node top; visited[top.x][top.y] = 1; while (!queue_node.empty()) { top = queue_node.front(); queue_node.pop(); if (top.x == final.x && top.y == final.y) { return top.step; } for (int i = 0; i != 4; i++) { int node_x = top.x + node_array[i][0]; int node_y = top.y + node_array[i][1]; if (node_x >= 0 && node_y >= 0) { if (map[node_x][node_y] == 0 && visited[node_x][node_y] == 0 && node_y < col && node_x < row) { node temp = node(node_x, node_y, top.step + 1); visited[node_x][node_y] = 1; queue_node.push(temp); } } } } return -1;}int main(int argc, const char * argv[]) { int col, row; cin >> row >> col; for (int i = 0; i != row; i++) { for (int j = 0; j != col; j++) { char flag; cin >> flag; if (flag == '#' || flag == '!') { map[i][j] = 1; } if (flag == '.') { map[i][j] = 0; } if (flag == 'S') { start.x = i; start.y = j; } if (flag == 'E') { final.x = i; final.y = j; } } } cout << find_map(row, col) << endl; return 0;}
0 0
- [C++]广度优先搜索(含C++模板)
- [C++]广度优先搜索(BFS)(附例题)
- C语言广度优先搜索之迷宫(队列)
- 广度优先搜索(BFS) C语言实现
- 图的广度优先搜索BFS(C++)
- C广度优先搜索,图的遍历
- 广度优先搜索的c语言实现
- 广度优先搜索模板(poj2251)
- 广度优先搜索模板(BFS)
- 【自用模板】广度优先搜索
- [模板]广度优先搜索BFS
- 广度优先搜索bfs模板
- 图的广度优先搜索遍历(邻接表&邻接矩阵)(C++)
- 图的深度、广度优先搜索——C/C++
- C/C++广度优先搜索模拟迷宫求解问题
- 迷宫最短路径 广度优先搜索—C
- 广度优先搜索BFS-C实现、思路、解析和总结
- 广度优先遍历(c/c++实现)
- 剑指Offer——求1-n的和值
- windows下使用adb工具查看android程序cpu和内存消耗情况
- Java开发使用Excel批量导入数据
- 3653: 谈笑风生
- TreeSet去重字符串
- [C++]广度优先搜索(含C++模板)
- sublime 整合 eslint
- CDN介绍
- maven pom文件详解
- 【mysql】order by 优化与索引的应用
- 深入Java集合学习系列:LinkedHashMap的实现原理
- FragmentTransaction add 和 replace 区别
- iOS应用架构谈 开篇
- 今天上qq空间看到一个有意思的东西,类似射线的效果