C 语言 BFS 程序

2024年8月28日 | 阅读 4 分钟

BFS(广度优先搜索)是一种用于遍历或搜索图或树数据结构的算法。它从根节点(或任何任意节点)开始,探索当前深度级别的所有节点,然后才移动到下一深度级别的节点。

该算法使用队列来跟踪接下来要访问的顶点。它首先将根顶点添加到队列中,然后重复地从队列前面移除顶点,将它们的邻居添加到队列后面,并将其标记为已访问。这个过程一直持续到队列为空,表示所有可达顶点都已访问过。

示例

实现BFS算法的示例代码:

输出

BFS traversal starting from vertex 0: 0 2 1 4 3 5

同样,当你以顶点1作为初始顶点运行代码时,输出将是

BFS traversal starting from vertex 1: 1 4 3 0 5 2

说明

这段代码创建一个包含6个顶点,并在它们之间添加边。之后,它从顶点0开始对图进行BFS遍历,并打印顶点被访问的顺序。在这段代码中,'struct node'表示邻接列表中的一个节点,'struct adj_list'表示邻接列表'struct graph'表示整个图'create_graph'函数创建一个包含'n'个顶点的新图,'add_edge'函数在两个顶点之间添加一条边。

'bfs'函数实现了BFS算法,从顶点'v'开始。使用队列和visited数组来跟踪接下来应该访问哪些顶点。'main'函数创建一个图并添加一些边,然后从顶点0开始调用'bfs'函数。

该BFS算法的时间空间复杂度可以讨论如下

时间复杂度

  • 该算法的时间复杂度O(V+E),其中V图顶点的数量,E图边的数量。
  • 在最坏的情况下,我们需要访问图中的所有顶点和边,因此时间复杂度与图的大小成正比。

空间复杂度

  • BFS算法空间复杂度O(V),其中V图顶点的数量。这是因为我们需要存储已访问的顶点和队列中的顶点。
  • 最坏的情况下,所有顶点都可以被添加到队列中,因此空间复杂度与图的大小成正比。