BFS通过队列实现逐层遍历,先访问起始节点并标记,再将其未访问的邻接节点入队,重复直至队列为空;示例代码展示了无向图和网格中最短路径的应用,适用于最短路径、连通分量、状态搜索等问题。

广度优先搜索(Breadth-First Search, BFS)是一种用于遍历或搜索图或树的算法。它从起始节点开始,逐层访问其邻居节点,直到找到目标节点或遍历完整个图。C++ 中实现 BFS 通常借助队列(queue)结构来保证先进先出的访问顺序。
BFS 的核心思想是:从源点出发,先访问所有直接相邻的节点,再依次访问这些相邻节点的未访问邻居,依此类推,像水波一样层层扩散。
实现流程如下:
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
void bfs(const vector<vector<int>>& adj, int start) {
    int n = adj.size();
    vector<bool> visited(n, false);
    queue<int> q;
    q.push(start);
    visited[start] = true;
    while (!q.empty()) {
        int u = q.front();
        q.pop();
        cout << u << " ";  // 输出当前访问的节点
        for (int v : adj[u]) {
            if (!visited[v]) {
                visited[v] = true;
                q.push(v);
            }
        }
    }
}
int main() {
    // 构建一个简单的无向图:0-1, 0-2, 1-3, 2-4
    vector<vector<int>> adj(5);
    adj[0] = {1, 2};
    adj[1] = {0, 3};
    adj[2] = {0, 4};
    adj[3] = {1};
    adj[4] = {2};
    cout << "BFS 遍历结果: ";
    bfs(adj, 0);  // 从节点 0 开始遍历
    cout << endl;
    return 0;
}
BFS 常用于二维网格问题,比如迷宫最短路径、图像填充、岛屿问题等。此时节点是坐标 (x, y),邻居是上下左右四个方向。
立即学习“C++免费学习笔记(深入)”;
示例:在 0-1 网格中求从左上角到右下角的最短路径(只能走 0)。
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int shortestPathBinaryMatrix(vector<vector<int>>& grid) {
    if (grid[0][0] == 1) return -1;
    int n = grid.size();
    vector<vector<bool>> visited(n, vector<bool>(n, false));
    queue<vector<int>> q;
    q.push({0, 0, 1});  // {x, y, distance}
    visited[0][0] = true;
    int dx[] = {-1, 1, 0, 0};
    int dy[] = {0, 0, -1, 1};
    while (!q.empty()) {
        auto cell = q.front(); q.pop();
        int x = cell[0], y = cell[1], dist = cell[2];
        if (x == n-1 && y == n-1) return dist;
        for (int i = 0; i < 4; ++i) {
            int nx = x + dx[i], ny = y + dy[i];
            if (nx >= 0 && nx < n && ny >= 0 && ny < n 
                && !visited[nx][ny] && grid[nx][ny] == 0) {
                visited[nx][ny] = true;
                q.push({nx, ny, dist + 1});
            }
        }
    }
    return -1;  // 无法到达终点
}
BFS 不仅用于图遍历,还在多种实际问题中有广泛应用:
基本上就这些。BFS 实现不复杂但容易忽略细节,比如访问标记的时机、边界判断、初始条件等。掌握好队列和状态管理,就能灵活应对各种变体问题。
以上就是c++++怎么实现广度优先搜索(BFS)_c++中BFS算法的实现与应用场景的详细内容,更多请关注php中文网其它相关文章!
 
                        
                        c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
 
                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号