广度优先搜索遍历邻接矩阵算法代码用c++实现
时间: 2023-07-27 15:12:43 浏览: 83
c++实现邻接矩阵的广度优先遍历
假设邻接矩阵为`graph[][]`,顶点总数为`n`,起点为`start`,我们可以使用队列来实现广度优先搜索。
具体步骤如下:
1. 初始化一个队列,将起点加入队列中,并将起点标记为已访问。
2. 从队列中取出一个顶点,遍历与该顶点相邻的未访问过的顶点,将其加入队列中,并标记为已访问。
3. 重复步骤2,直到队列为空。
下面是C++代码实现:
```c++
#include <iostream>
#include <queue>
using namespace std;
const int MAXN = 100; // 最大顶点数
int graph[MAXN][MAXN]; // 邻接矩阵
bool visited[MAXN]; // 标记是否已访问
void bfs(int start, int n) {
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 < n; i++) {
if (graph[cur][i] && !visited[i]) { // 如果相邻且未访问过
q.push(i);
visited[i] = true;
}
}
}
}
int main() {
int n, m, start;
cin >> n >> m >> start; // 读入顶点数、边数和起点
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v; // 读入一条边的两个端点
graph[u][v] = graph[v][u] = 1; // 在邻接矩阵中标记这条边
}
bfs(start, n);
return 0;
}
```
注意:这里只是一个简单的实现,如果需要更加高效的算法,可以使用优先队列来优化。
阅读全文