邻接表存储图的广度优先遍历代码实现
时间: 2023-11-05 16:17:16 浏览: 174
图的邻接表存储实现及深度优先遍历
4星 · 用户满意度95%
邻接表是一种常见的图存储结构,广度优先遍历是一种常见的图遍历算法,下面是邻接表存储图的广度优先遍历的代码实现(假设图中顶点的编号从0开始):
```
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
const int MAXN = 100010; // 最大顶点数
vector<int> adjList[MAXN]; // 邻接表
bool visited[MAXN]; // 标记数组
void bfs(int start){
queue<int> q;
visited[start] = true;
q.push(start);
while(!q.empty()){
int u = q.front();
q.pop();
cout << u << " ";
for(int i=0; i<adjList[u].size(); i++){
int v = adjList[u][i];
if(!visited[v]){
visited[v] = true;
q.push(v);
}
}
}
}
int main(){
int n, m;
cin >> n >> m; // n 表示顶点数,m 表示边数
// 构建邻接表
for(int i=0; i<m; i++){
int u, v;
cin >> u >> v;
adjList[u].push_back(v);
adjList[v].push_back(u); // 无向图需要反向也存一次
}
// 从顶点0开始进行广度优先遍历
bfs(0);
return 0;
}
```
以上代码中,`adjList`数组存储了每个顶点的邻接点列表,`visited`数组用于标记每个顶点是否已经被访问过。在广度优先遍历的过程中,使用队列来存储待访问的顶点。从起始顶点开始,将其标记为已访问并加入队列中,然后不断从队列中取出顶点,访问该顶点并将其未访问过的邻接点加入队列中,直到队列为空。
阅读全文