用c++写一个简易的宽度优先搜素代码
时间: 2023-12-08 11:06:17 浏览: 32
好的,以下是一个简单的宽度优先搜索的 C++ 代码示例:
```
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
const int MAXN = 1005; // 最大顶点数
vector<int> G[MAXN]; // 邻接表存图
bool vis[MAXN]; // 标记是否已经访问过该顶点
void bfs(int s) {
queue<int> q;
q.push(s);
vis[s] = true;
while (!q.empty()) {
int u = q.front();
q.pop();
cout << u << " ";
for (int i = 0; i < G[u].size(); i++) {
int v = G[u][i];
if (!vis[v]) {
q.push(v);
vis[v] = true;
}
}
}
}
int main() {
int n, m; // n 表示顶点数,m 表示边数
cin >> n >> m;
for (int i = 1; i <= m; i++) {
int u, v;
cin >> u >> v;
G[u].push_back(v);
G[v].push_back(u); // 无向图需要添加反向边
}
for (int i = 1; i <= n; i++) {
if (!vis[i]) {
bfs(i);
}
}
return 0;
}
```
这段代码实现了一个简单的无向图的宽度优先搜索。其中,`G` 为邻接表存储的图,`vis` 数组用于标记每个顶点是否已经被访问过,`bfs` 函数为宽度优先搜索的实现。在 `main` 函数中,我们先读入图的顶点数和边数,然后用邻接表存储图的边,最后依次遍历每个顶点,如果该顶点还没有被访问过,就以该顶点为起点进行一次宽度优先搜索。