广度优先搜索遍历连通图算法代码用c++实现
时间: 2023-07-27 17:12:50 浏览: 105
c/c++语言实现的广度优先搜索算法
5星 · 资源好评率100%
以下是广度优先搜索遍历连通图算法的C++实现代码:
```c++
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
void BFS(vector<vector<int>>& graph, int start, vector<bool>& visited)
{
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 < graph[cur].size(); i++)
{
int next = graph[cur][i];
if (!visited[next])
{
visited[next] = true;
q.push(next);
}
}
}
}
void BFS_traversal(vector<vector<int>>& graph)
{
int n = graph.size();
vector<bool> visited(n, false);
for (int i = 0; i < n; i++)
{
if (!visited[i])
{
BFS(graph, i, visited);
}
}
}
int main()
{
vector<vector<int>> graph = {{1, 2}, {0, 2, 3}, {0, 1, 3}, {1, 2, 4}, {3}};
BFS_traversal(graph);
return 0;
}
```
在这个实现中,我们使用了一个队列来存储每个节点的顺序,并使用一个visited数组来跟踪我们是否已经访问了每个节点。我们首先从起点开始遍历,将其添加到队列中并将visited标记为true。然后,我们进入while循环,将队列的第一个节点弹出并打印它,然后遍历与该节点相邻的所有节点。如果我们发现一个未访问的节点,就将其添加到队列中,并将visited标记为true。最后,当队列为空时,我们完成了遍历。
阅读全文