当前位置:首页 > C++知识 > 正文内容

图的访问与遍历-广度优先搜索

  1. 对于无向图的广度优先搜索

#include <iostream>
#include <vector>
#include <queue>
using namespace std;
// 广度优先遍历核心函数
void BFS(int start, const vector<vector<int>>& adjList) {
    // 边界检查:起始节点超出范围
    if (start < 0 || start >= adjList.size()) {
        cout << "起始节点无效!" << endl;
        return;
    }
    vector<bool> visited(adjList.size(), false); // 记录节点是否被访问
    queue<int> q; // 队列
    // 初始化:将起始节点入队并标记为已访问
    q.push(start);
    visited[start] = true;
    cout << "BFS遍历结果: ";
    // 队列非空时循环
    while (!q.empty()) {
        int node = q.front(); // 取出队首节点
        q.pop();              // 队首节点出队
        cout << node << " ";  // 输出当前节点
        // 遍历当前节点的所有邻接节点
        for (int neighbor : adjList[node]) {
            if (!visited[neighbor]) { // 未访问过的邻接节点
                visited[neighbor] = true; // 标记为已访问
                q.push(neighbor);         // 入队
            }
        }
    }
    cout << endl;
}
//创建邻接表
vector<vector<int>> createAdjList(int numVertices) {
    return vector<vector<int>>(numVertices);
}
// 添加无向边
void addUndirectedEdge(vector<vector<int>>& adjList, int u, int v) {
    adjList[u].push_back(v);
    adjList[v].push_back(u);
}
int main() {
    // 构建无向图示例
    int vertexNum = 5; // 5个顶点(0-4)
    auto adjList = createAdjList(vertexNum);   
    // 添加边:0-1, 0-2, 1-3, 1-4, 2-4
    addUndirectedEdge(adjList, 0, 1);
    addUndirectedEdge(adjList, 0, 2);
    addUndirectedEdge(adjList, 1, 3);
    addUndirectedEdge(adjList, 1, 4);
    addUndirectedEdge(adjList, 2, 4);
    // 执行BFS(从0号节点开始)
    BFS(0, adjList);
    return 0;
}


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

分享给朋友:
返回列表

上一篇:Code::Blocks下载安装教程

没有最新的文章了...

相关文章

【入门篇】>>> DEVC++下载、安装、简单使用

【入门篇】>>> DEVC++下载、安装、简单使用

什么是DEVC++    DEVC++是一款编程工具,是一个Windows环境下的一个适合于初学者使用的轻量级C/C++ 集成开发环境(IDE),它是一款自由软件,遵守G...

指针(三):指针与函数

1.交换的例子#include<iostream> #include<cstdio> #include<cstring> using namespa...

【C++图形化编程】鼠标函数及鼠标画板

【C++图形化编程】鼠标函数及鼠标画板

0.前言这篇文章简单介绍一下利用鼠标画图的程序#include<graphics.h> #include<conio.h> int main(){ initg...

图的访问与存储—临接表

图的访问与存储—临接表

        在图论中,邻接表(Adjacency List) 是表示图(包括无向图、有向图、带权图)的一种高效数据结构,核心思想是为图中的每个顶点...

DEVC++中的快捷键

快捷键可以帮我们加快速度,下面介绍一下我们经常用的快捷键。 Ctrl+A   全选Ctrl +C   复制Ctrl +V   粘贴...

编写第一个C++程序

编写第一个C++程序

前面的文章介绍了Dev-C++的下载安装:【入门篇】>>> DEVC++下载、安装、简单使用 - 青少年编程知识记录 (codecoming.com)今天讲一下如何使用Dev-C++...