广度优先搜索(BFS)算法详解与C++实现
广度优先搜索(Breadth-First Search,BFS)是一种遍历或搜索树和图的算法。它从树的根(或图的某一顶点)开始,探索邻近的节点,然后再对每个邻近节点做同样的操作。BFS在搜索最短路径问题、层次遍历树、图的连通性等方面有着广泛的应用。
BFS的工作原理
BFS按照距离起始节点的层数逐层向外扩展,即先访问起始节点,然后是距离起始节点最近的节点,接着是距离起始节点第二近的节点,依此类推。为了实现这种层级的遍历,BFS使用了先进先出(FIFO)的队列结构来存储每层的节点。
BFS的实现
BFS的实现通常依赖于队列数据结构,通过迭代的方式来实现。在开始时,将起始节点放入队列。然后,只要队列不为空,就从队列中移除一个节点,访问它,并将所有未访问过的邻接节点加入队列中。
C++中BFS的实现
以下是使用C++标准库中的队列来实现BFS算法的示例代码:
#include <iostream>
#include <vector>
#include <queue>
// 使用队列的方式实现的BFS
void BFS(int startVertex, const std::vector<std::vector<int>>& graph) {
std::vector<bool> visited(graph.size(), false);
std::queue<int> queue;
// 标记起始顶点为已访问,并将其入队
visited[startVertex] = true;
queue.push(startVertex);
while (!queue.empty()) {
// 取出队首元素
int vertex