图的广度优先遍历c++代码
时间: 2023-11-06 22:06:06 浏览: 109
C++实现图的邻接表存储和广度优先遍历实例分析
以下是图的广度优先遍历的C++代码:
```c++
#include <iostream>
#include <queue>
using namespace std;
const int MAXN = 100; // 最大顶点数
int G[MAXN][MAXN]; // 邻接矩阵存储图
bool vis[MAXN]; // 标记数组,记录顶点是否已被访问
void bfs(int s, int n) { // s为起点,n为顶点数
queue<int> q;
q.push(s); // 将起点s加入队列
vis[s] = true; // 标记起点已被访问
while(!q.empty()) { // 队列不为空时循环
int u = q.front(); // 取出队首元素
q.pop(); // 弹出队首元素
cout << u << " "; // 输出当前访问的顶点
for(int v = 0; v < n; v++) { // 遍历所有顶点
if(G[u][v] && !vis[v]) { // 如果u和v之间有边且v未被访问
q.push(v); // 将v加入队列
vis[v] = true; // 标记v已被访问
}
}
}
}
int main() {
int n, m, s; // n为顶点数,m为边数,s为起点
cin >> n >> m >> s;
for(int i = 0; i < m; i++) {
int u, v; // u和v之间有一条边
cin >> u >> v;
G[u][v] = G[v][u] = 1; // 无向图,两个方向都要标记
}
bfs(s, n); // 从起点s开始广度优先遍历
return 0;
}
```
其中,邻接矩阵存储图,标记数组记录顶点是否已被访问,queue模拟队列,bfs函数实现广度优先遍历,主函数读入图的信息,并调用bfs函数进行遍历。
阅读全文