算法系列—广度优先搜索(BFS)
2016-11-03 16:07
120 查看
单点最短路径:给定一幅图和一个顶点s,从s到给定的顶点v是否存在一条路径?如果有,找出其中最短的那一条。
解决这个问题的经典方法叫做广度优先搜索。
C++实现代码如下:
解决这个问题的经典方法叫做广度优先搜索。
广度优先搜索思路:
要找到从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; }
相关文章推荐
- 经典算法研究系列:四、教你通透彻底理解:BFS和DFS优先搜索算法
- 经典算法研究系列:四、教你通透彻底理解:BFS和DFS优先搜索算法
- 广度优先搜索(BFS)算法
- 【算法系列学习三】[kuangbin带你飞]专题二 搜索进阶 之 A-Eight 反向bfs打表和康拓展开
- Java实现算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)
- 用BFS(广度优先搜索)算法解决农夫过河问题
- 菜鸟的ACM之路(7)北大MOOC算法基础笔记__第十周__广度优先搜索(BFS)
- 经典算法研究系列:四、教你通透彻底理解:BFS和DFS优先搜索算法
- 经典算法研究系列:四、教你通透彻底理解:BFS和DFS优先搜索算法
- 图的基本算法--深度优先搜索(dfs) 和 广度优先搜索(bfs)
- 经典算法研究系列:四、教你通透彻底理解:BFS和DFS优先搜索算法
- 【算法】广度优先搜索(BFS)I
- POJ 3026 Borg Maze 图论 prim算法(最小生成树)+BFS算法(广度优先搜索)
- 算法: 无向图的深度优先搜索(dfs)和广度优先搜索(bfs)
- 经典算法研究系列:四、教你通透彻底理解:BFS和DFS优先搜索算法
- 经典算法研究系列:四、教你通透彻底理解:BFS和DFS优先搜索算法
- 经典算法研究系列:四、教你通透彻底理解:BFS和DFS优先搜索算法
- 算法 BFS广度优先搜索
- 广度优先搜索(BFS)算法
- 【算法笔记】bfs广度优先搜索