算法系列—广度优先搜索(BFS)
来源:互联网 发布:冒险岛交易市场数据 编辑:程序博客网 时间:2024/05/20 08:27
单点最短路径:给定一幅图和一个顶点s,从s到给定的顶点v是否存在一条路径?如果有,找出其中最短的那一条。
解决这个问题的经典方法叫做广度优先搜索。
广度优先搜索思路:
要找到从s到v的最短路径,从s开始,在所有由一条边就可以到达的顶点中寻找v,如果找不到,就继续在距离两条边的顶点中查找v,如此一直执行。
C++实现代码如下:
//BFS.cpp//无向图#include <iostream>#include <list>#include <queue>using namespace std;class Graph{int count = 0;//顶点数list<int> *adj;//邻接表bool *visited;public:void addEdge(int v, int w);//向图中添加边void BFS(int v);//广度优先搜索接口Graph(int count);};Graph::Graph(int count){this->count = count;adj = new list<int>[count];visited = new bool[count];for (int i = 0; i < count; ++i)visited[i] = false;}void Graph::addEdge(int v, int w){adj[v].push_back(w);adj[w].push_back(v);}void Graph::BFS(int v){queue<int> queue_node;//用队列保存下一步要访问的元素visited[v] = true;queue_node.push(v);while(!queue_node.empty()){int s=queue_node.front();cout << s << " ";queue_node.pop();for (int w : adj[s]){if (!visited[w]) {visited[w] = true;queue_node.push(w);}}}}/* 测试 */int main(){Graph g(5);g.addEdge(0, 1);g.addEdge(0, 2);g.addEdge(2, 3);g.addEdge(3, 3);g.addEdge(0, 4);cout << "从2开始深度搜索" << endl;g.BFS(2);cout << endl;return 0;}
0 0
- 算法系列—广度优先搜索(BFS)
- 广度优先搜索算法—BFS
- 广度优先搜索(BFS)算法
- BFS-广度优先搜索算法(图)
- 广度优先搜索算法(BFS)
- 【算法】广度优先搜索(BFS)I
- 【算法】广度优先搜索(BFS)II
- 广度优先搜索(BFS)算法
- 算法 BFS广度优先搜索
- 【算法】--广度优先搜索BFS
- 广度优先搜索BFS算法
- 算法——深度优先搜索(DFS)和广度优先搜索(BFS)
- 广度优先搜索(BFS)
- 广度优先搜索(BFS)
- 广度优先搜索(BFS)
- 广度优先搜索(BFS)
- BFS(广度优先搜索)
- 算法之BFS(广度优先搜索算法)
- Eclipse中从svn中检出maven项目
- bootstrap学习总结-css样式设计(一)
- 富文本之NSAttributedString与NSMutableAttributedString
- Protocol Buffer技术详解(1)-语言规范
- laravel项目云服务器linux部署
- 算法系列—广度优先搜索(BFS)
- Java中private、protected、public和default的区别
- 一年之中第几天
- 【GDOI2017模拟11.3】永恒的契约
- Unity3D Shader之光照模型——理论与实践:用两种方式来实现漫反射Diffuse Reflection
- 何恺明经典去雾算法
- settings.db 在androd 6.0上的变化
- Android系统启动——Zygote进程
- ROS(indigo) 语音工具 科大讯飞 百度 pocketsphinx julius rospeex 16.11.22更新 ROS中文语音