广度优先搜索(BFS)是一种按层遍历图的算法,使用队列实现并维护访问标记,适用于最短路径与连通性问题。从起始节点开始,依次将未访问的邻接节点入队,直至队列为空。C++中常用vector数组构建邻接表存储图结构,并通过bool数组记录节点访问状态。核心步骤包括:起始节点入队并标记、循环处理队首节点及其邻接点,直到队列为空。示例程序构建含6个节点的无向图,调用BFS后输出结果为1 2 3 4 5 6,体现了逐层扩展的遍历顺序。该算法结构清晰,关键在于队列调度与状态控制。

广度优先搜索(BFS)是图论中一种基础的遍历算法,适用于求解最短路径、连通性等问题。在C++中,BFS通常借助队列(queue)实现,保证按层访问节点。
BFS从起始节点开始,先访问其所有邻接节点,再逐层向外扩展。使用一个队列保存待访问的节点,同时用一个数组或集合记录已访问的节点,避免重复处理。
关键步骤:常用邻接表存储图,C++中可用vector的数组或vector的vector实现。
示例:无向图的邻接表表示
立即学习“C++免费学习笔记(深入)”;
const int MAXN = 1e5 + 5; vector<int> graph[MAXN]; // 邻接表 bool visited[MAXN]; // 访问标记数组
使用STL中的queue完成节点调度。
void bfs(int start) {
queue<int> q;
q.push(start);
visited[start] = true;
while (!q.empty()) {
int u = q.front();
q.pop();
cout << u << " "; // 处理当前节点
for (int v : graph[u]) {
if (!visited[v]) {
visited[v] = true;
q.push(v);
}
}
}
}
构建一个包含6个节点的无向图并执行BFS。
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int MAXN = 7;
vector<int> graph[MAXN];
bool visited[MAXN];
void addEdge(int u, int v) {
graph[u].push_back(v);
graph[v].push_back(u);
}
void bfs(int start) {
queue<int> q;
q.push(start);
visited[start] = true;
while (!q.empty()) {
int u = q.front();
q.pop();
cout << u << " ";
for (int v : graph[u]) {
if (!visited[v]) {
visited[v] = true;
q.push(v);
}
}
}
}
int main() {
addEdge(1, 2);
addEdge(1, 3);
addEdge(2, 4);
addEdge(2, 5);
addEdge(3, 6);
bfs(1); // 输出: 1 2 3 4 5 6
return 0;
}
基本上就这些。BFS的核心在于队列的使用和访问状态的维护,结构清晰,适合解决分层遍历问题。
以上就是C++如何实现广度优先搜索(BFS)_C++图论算法中BFS的队列实现的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号