C++ BFS 代码17 Mar 2025 | 4 分钟阅读 什么是 BFS?广度优先搜索 (BFS) 是一种用于遍历或搜索图的算法。它从给定的顶点开始,探索所有相邻顶点,然后才移动到下一级顶点。BFS 对于查找图中两个顶点之间的最短路径或查找图的连通分量很有用。它也用于拓扑排序,即有向无环图 (DAG) 中顶点的线性排序,使得对于从顶点 u 到顶点 v 的每条边 UV,u 在排序中位于 v 之前。 在本教程中,我们将学习如何在 C++ 中实现 BFS。我们将首先了解 BFS 的概念及其时间复杂度。然后,我们将了解如何使用邻接列表在 C++ 中表示图,以及如何使用 BFS 算法遍历图。 BFS 的概念BFS 是一种用于遍历或搜索图的算法。它从给定的顶点开始,探索所有相邻顶点,然后才移动到下一级顶点。该算法维护一个要访问的顶点队列,从源顶点开始。每一步,它都会从队列中移除一个顶点,并将其未访问的邻居添加到队列中。这个过程一直持续到队列中没有更多要访问的顶点。 BFS 算法的时间复杂度为 O(V+E),其中 V 是图中的顶点数,E 是边数。这使得它更适合密集图,其中边数接近顶点数。 在 C++ 中表示图在 C++ 中有几种表示图的方法。一种常见的表示方法是使用邻接列表,它是与给定顶点相邻的所有顶点的列表。例如,考虑以下具有 5 个顶点的图 ![]() 我们可以使用邻接列表来表示这个图,如下所示 这里,adj_list[i] 是一个包含顶点 i 的邻居的向量。 在 C++ 中实现 BFS 输出 ![]() 说明 在此代码中,我们首先定义 bfs() 函数,该函数接受邻接列表 adj_list、起始顶点 start 和可选的目标顶点 target。bfs() 函数初始化一个布尔数组 visited 以跟踪已访问的顶点,以及一个向量 order 以存储 BFS 遍历顺序。它还创建一个队列 q 来保存要访问的顶点。 然后,该函数将起始顶点添加到队列中并将其标记为已访问。然后它进入一个循环,该循环一直持续到队列为空。循环的每次迭代都会从队列中移除下一个顶点并将其添加到遍历顺序中。然后它将其所有未访问的邻居添加到队列中并将其标记为已访问。 最后,如果指定了目标顶点但未找到,则函数返回一个空向量。否则,它返回遍历顺序。 在 main() 函数中,我们为具有 5 个顶点的图创建了一个邻接列表。然后我们从顶点 0 开始执行 BFS 搜索,并将遍历顺序存储在 order 向量中。最后,我们将遍历顺序打印到控制台。 下一主题在 C++ 中创建链表 |
本教程旨在解释具有用户定义大小的二维向量的概念。我们必须了解二维数组,其中数组是二维的,可以将其可视化为矩阵。在这里,向量的概念解决了固定大小集合的核心痛点,...
阅读 3 分钟
当我们只需要一种可以在 O(Logn) 时间内处理插入、删除和查找最小值的数据结构时,最小堆就派上用场了。在本文中,我们将介绍如何在 C++ 中实现最小堆。一个完全二叉树,它是一个最小堆或……
阅读 3 分钟
一种称为 K 维树(或简称 K-D 树)的数据结构。它旨在 K 维域中进行有效的空间搜索。它是二叉搜索树的多维泛化。K-D 树在计算机图形学、最近邻搜索等各种领域都有应用...
5 分钟阅读
什么是 Rust?Rust 是 Mozilla 于 2010 年创建的一种计算机语言,主要关注效率和安全性,特别是安全并发。尽管 Rust 编程语言类似于 C++,但它在不使用垃圾回收的情况下提供了内存安全。它旨在超越 C++...
阅读 6 分钟
Kruskal 算法简介:在快速发展的科技和信息世界中,算法对于解决复杂问题至关重要。Kruskal 算法是一种简单且效果良好的出色算法。它源于图论,非常适合寻找连接……
11 分钟阅读
异常是在程序执行期间发生的意外事件,它会中断程序的正常流程。异常有两种类型:已检查异常和未检查异常。已检查异常是编译时异常,因为编译器在编译时会检查这些异常,而...
阅读 4 分钟
在本文中,我们将通过一个例子讨论如何在 C++ 中找到 N 中设置位和未设置位计数之间的绝对差。该任务涉及确定整数的设置位(值为 1 的位)和未设置位之间的绝对差...
阅读 3 分钟
银行家算法是一种资源分配和死锁避免方法,在操作系统中使用,以确保在多资源环境中高效安全地执行操作。它由 Edsger W. Dijkstra 于 1965 年创建,对于管理包括...在内的资源至关重要。
阅读 15 分钟
C++ 中的 Vector 是什么?在 C++ 中,vector 是一个序列容器,它在连续的内存块中存储相同类型的元素。Vector 中的每个元素都分配有一个数字索引,用于访问该元素。Vector 类似...
阅读 4 分钟
字符串是计算机编程中的关键数据类型,具有广泛的应用。它们是字符序列,可以表示从简单的单词到整本书的任何内容。在许多编程语言中,字符串用于存储文本信息,例如……
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India