c++图的广度优先遍历
时间: 2023-06-23 19:46:28 浏览: 99
图的广度优先遍历
4星 · 用户满意度95%
C++中实现图的广度优先遍历可以使用STL队列来实现。具体实现步骤如下:
1. 定义图的数据结构,可以使用邻接表或邻接矩阵来表示。
2. 定义一个bool类型的数组visited,用来记录每个节点是否被遍历过,初始值为false。
3. 定义一个queue类型的队列,用来存储待访问的节点。
4. 从图中选取一个起始节点,将其加入队列中,并将visited数组中对应的元素值设为true。
5. 重复执行以下步骤,直到队列为空:
a. 从队列中取出一个节点。
b. 遍历该节点的所有邻居节点,对于每个未被访问过的邻居节点,将其加入队列中,并将visited数组中对应的元素值设为true。
下面是一个简单的示例代码:
```cpp
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
const int MAXN = 100;
vector<int> adjList[MAXN];
bool visited[MAXN];
void bfs(int start) {
queue<int> q;
q.push(start);
visited[start] = true;
while (!q.empty()) {
int cur = q.front();
q.pop();
cout << cur << " ";
for (int i = 0; i < adjList[cur].size(); i++) {
int next = adjList[cur][i];
if (!visited[next]) {
q.push(next);
visited[next] = true;
}
}
}
}
int main() {
int n, m;
cin >> 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);
}
bfs(1);
return 0;
}
```
其中,adjList为邻接表,visited为记录节点是否被访问过的数组,bfs函数为广度优先遍历函数,start为起始节点。在主函数中,先读入图的节点数n和边数m,然后读入每条边的起点和终点,并构建邻接表。最后调用bfs函数以1为起始节点进行遍历。
阅读全文