对邻接表实现广度遍历C++
时间: 2023-06-16 19:07:38 浏览: 111
C++实现图的邻接表存储和广度优先遍历实例分析
5星 · 资源好评率100%
以下是使用邻接表实现广度优先搜索(BFS)的C++代码:
```c++
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
vector<int> adj[100]; // 邻接表
void bfs(int start) {
queue<int> q;
bool visited[100] = {false};
q.push(start);
visited[start] = true;
while (!q.empty()) {
int curr = q.front();
q.pop();
cout << curr << " ";
for (int i = 0; i < adj[curr].size(); i++) {
int next = adj[curr][i];
if (!visited[next]) {
visited[next] = true;
q.push(next);
}
}
}
}
int main() {
int n, m;
cin >> n >> m; // n 表示节点总数,m 表示边总数
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v; // 读入边的两个端点
adj[u].push_back(v); // 加入邻接表中
adj[v].push_back(u); // 无向图需要加上这行
}
bfs(1); // 从节点 1 开始进行广度优先搜索
return 0;
}
```
其中,邻接表使用了 STL 中的 vector,表示每个节点对应一个 vector,其中存放了该节点所连向的节点。在 BFS 中,使用了 STL 中的 queue,用于存放待访问的节点。visited 数组用于标记每个节点是否已经被访问过。
阅读全文