C++ 算法之 BFS 详解

一、BFS 是什么

BFS 即广度优先搜索(Breadth-First Search) ,是一种图形搜索算法。它从给定的起始顶点开始,以广度优先的方式逐层探索图的节点,就像水波纹一样,从中心向四周扩散。这种搜索方式可以保证在找到目标节点时,走过的路径是最短的(如果图中每条边的权重相同)。

二、BFS 的实现原理

BFS 使用队列(Queue)来辅助实现。基本步骤如下:

  1. 初始化:将起始节点放入队列,并标记为已访问。
  1. 循环处理:当队列不为空时,取出队首节点。
  1. 检查目标:如果取出的节点是目标节点,则搜索结束。
  1. 扩展节点:将取出节点的所有未访问邻接节点加入队列,并标记为已访问。
  1. 重复步骤 2-4,直到找到目标节点或者队列为空。

三、C++ 代码实现 BFS

#include <iostream>
#include <vector>
#include <queue>
using namespace std;

// 定义图的邻接表结构
using AdjList = vector<vector<int>>;

// BFS函数实现
void bfs(const AdjList& graph, int start) {
    int n = graph.size();
    vector<bool> visited(n, false);
    queue<int> q;

    // 标记起始节点为已访问并加入队列
    visited[start] = true;
    q.push(start);

    while (!q.empty()) {
        int node = q.front();
        q.pop();
        cout << node << " ";

        // 遍历当前节点的所有邻接节点
        for (int neighbor : graph[node]) {
            if (!visited[neighbor]) {
                visited[neighbor] = true;
                q.push(neighbor);
            }
        }
    }
}

int main() {
    // 示例图的邻接表
    AdjList graph = {
        {1, 2},
        {0, 3},
        {0, 3},
        {1, 2}
    };

    cout << "从节点0开始的BFS遍历结果: ";
    bfs(graph, 0);

    return 0;
}

在这段代码中,首先定义了图的邻接表结构,然后实现了 BFS 函数。在bfs函数中,使用一个布尔数组visited来记录节点是否被访问过,通过队列q来实现广度优先搜索。

四、BFS 的应用场景

  1. 最短路径问题:在无权图中,BFS 可以快速找到从起点到终点的最短路径。
  1. 迷宫求解:可以用来寻找从迷宫入口到出口的最短路径。
  1. 社交网络分析:例如查找人与人之间的最短社交距离。

BFS 是一种非常实用的图搜索算法,理解并掌握它在 C++ 中的实现和应用,对于解决各种图相关问题大有裨益。通过不断练习和实践,可以更好地运用 BFS 算法解决实际问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值