图的广度优先遍历邻接矩阵
时间: 2023-09-06 11:09:11 浏览: 81
邻接矩阵是表示图的常用方式,广度优先遍历也是图的一种常用遍历方式。下面是邻接矩阵表示的无向图的广度优先遍历实现:
```C++
#include <iostream>
#include <queue>
using namespace std;
const int MAXN = 100;
int n, m; // n 表示图中节点数,m 表示边数
int e[MAXN][MAXN]; // 邻接矩阵
bool vis[MAXN]; // 标记节点是否已被访问
void bfs(int start) {
queue<int> q; // 定义一个队列存放待访问节点
q.push(start);
vis[start] = true;
while (!q.empty()) {
int u = q.front();
q.pop();
cout << u << " ";
for (int v = 0; v < n; v++) {
if (e[u][v] && !vis[v]) { // 如果 u 和 v 之间有边并且 v 还没被访问过
q.push(v);
vis[v] = true;
}
}
}
}
int main() {
cin >> n >> m;
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
e[u][v] = e[v][u] = 1; // 无向图,所以 u->v 和 v->u 的边都要加
}
bfs(0); // 从节点 0 开始遍历
return 0;
}
```
上面的代码中,我们使用了一个队列存放待访问节点。首先将起点加入队列,并将其标记为已访问。然后不断从队列中取出节点进行遍历,对于每个节点 u,将其所有未访问过的邻节点 v 加入队列中,并标记为已访问。这样就可以保证每个节点只被访问一次,并且按照广度优先的顺序进行遍历。
阅读全文