邻接矩阵实现BFS广度优先搜索
2015-03-29 22:53
429 查看
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <queue> using namespace std; #define VERTEX_NUM 8 bool visited[VERTEX_NUM + 1]; // 访问标志数组(备忘表) int FirstAdjVex(bool G[VERTEX_NUM + 1][VERTEX_NUM + 1], int v) { for (int j = 1; j <= VERTEX_NUM; j++) { if (G[v][j] == 1) return j; } cout << "该点是孤立点" << endl; // 连通图则不会到这一步 return -1; } int NextAdjVex(bool G[VERTEX_NUM + 1][VERTEX_NUM + 1], int v, int w) { for (int j = w + 1; j <= VERTEX_NUM; j++) { if (G[v][j] == 1) return j; } return -1; } void BFSTraverse(bool G[VERTEX_NUM + 1][VERTEX_NUM + 1]) { // 按广度优先非递归遍历图G。使用辅助队列Q和访问标志数组visited。 int v; int w; queue<int> Q; int u; for (v = 1; v <= VERTEX_NUM; ++v) visited[v] = false; for (v = 1; v <= VERTEX_NUM; ++v) { if (!visited[v]) { // v尚未访问 visited[v] = true; cout << v << endl; Q.push(v); while (!Q.empty()) { u = Q.front(); Q.pop(); // 队头元素出队并置为u for (w = FirstAdjVex(G, u); w >= 0; w = NextAdjVex(G, u, w)) { if (!visited[w]) { // u的尚未访问的邻接顶点w入队列Q visited[w] = true; cout << w << endl; Q.push(w); } } } } } } void CreatAdjMatrixGraph(bool G[VERTEX_NUM + 1][VERTEX_NUM + 1]) { int a; int b; while (cin >> a >> b, !(a == 0 && b == 0)) { //以0 0作为输入结束 G[a][b] = 1; G[b][a] = 1; } } void Display(bool G[VERTEX_NUM + 1][VERTEX_NUM + 1]) { for (int i = 1; i <= VERTEX_NUM; i++) { // 输出邻接矩阵 for (int j = 1; j <= VERTEX_NUM; j++) { cout << G[i][j] << ' '; } cout << endl; } } int main(int argc, char **argv) { freopen("cin.txt", "r", stdin); bool G[VERTEX_NUM + 1][VERTEX_NUM + 1] = {0}; CreatAdjMatrixGraph(G); Display(G); BFSTraverse(G); return 0; } /* cin.txt: 2 4 5 4 5 3 6 7 7 0 */
运行结果:
![](http://images.cnblogs.com/cnblogs_com/jjtx/388697/o_2.png)
相关文章推荐
- 算法导论-第22章-基本的图算法-22.2 广度优先搜索-22.2-4 用邻接矩阵方法实现BFS
- 图的BFS和DFS在数据结构为邻接矩阵时的实现
- 邻接矩阵实现图的存储,DFS,BFS遍历
- 第六章:图。(邻接矩阵实现图的存储及dfs、bfs)
- 邻接矩阵实现Dijkstra算法以及BFS与DFS算法
- sdut 2141 BFS(用邻接矩阵和邻接表(采用优先队列)实现
- 利用邻接矩阵存储无向图,并实现BFS(非递归) DFS(递归+非递归)两种遍历
- 广度优先搜索(BFS) C语言实现
- c语言:图的邻接矩阵的建立与广度优先搜索实现
- 基于邻接矩阵和邻接表的两种方法实现无向图的BFS和DFS
- 第六章:图。(邻接矩阵实现图的存储及dfs、bfs)
- [数据结构]图基于邻接矩阵的BFS与DFS的C语言简单实现
- C语言实现图的邻接矩阵和BFS DFS
- 邻接矩阵实现的广度优先搜索
- 广度优先搜索(BFS+STL queue)实现
- 图的广度优先遍历BFS(分别以邻接矩阵和邻接链表实现)
- 广度优先搜索(BFS) C++实现
- 图的广度优先搜索(BFS)、深度优先搜索(DFS)(邻接矩阵法和邻接表法java实现)
- 基于邻接矩阵的BFS广度优先搜索
- 一种非递归实现广度优先搜索(BFS)的方法