图配置与控制

图类型与基本参数

图参数配置

(5-15)

动画速度

5

操作控制

图可视化

当前队列状态

队尾
队列为空
未访问节点
当前节点
已访问节点
队列中节点

遍历记录

步骤 操作 节点 说明

代码执行

void BFS(Graph G, int v) { visited[v] = true; // 访问顶点v cout << v << " "; // 将v加入队列 queue.push(v); // 遍历队列 while (!queue.isEmpty()) { int u = queue.pop(); // 遍历u的所有邻接点 for (int w : G.adj[u]) { if (!visited[w]) { visited[w] = true; cout << w << " "; queue.push(w); } } } }
当前步骤说明
尚未开始遍历,请点击"开始遍历"按钮。

广度优先搜索(BFS)介绍

算法原理

广度优先搜索是一种用于遍历或搜索图和树的算法,它从根节点开始,逐层访问所有节点,直到访问完所有节点为止。BFS通常使用队列来实现。

BFS算法步骤

  1. 选择起点选择一个起始顶点,并标记为已访问
  2. 入队将起始顶点加入队列
  3. 处理队列从队列中取出一个顶点,处理其所有未访问的邻接点,并将它们加入队列
  4. 重复直到队列为空

时间复杂度

O(V + E)
其中V为顶点数,E为边数

空间复杂度

O(V)
用于标记已访问顶点和队列

算法应用

最短路径

在无权图中查找从源顶点到目标顶点的最短路径

连通性检测

检测图中所有顶点是否连通

二分图检测

判断图是否为二分图

网络爬虫

网页抓取按照层次结构进行

相关练习

最短路径

中等难度

给定一个图和两个顶点s和t,使用BFS找出从s到t的最短路径。

BFS 路径
前往题目

连通区域

中等难度

给定一个由'1'(陆地)和'0'(水)组成的二维网格地图,计算连通区域的数量。一个连通区域由相邻陆地水平或垂直连接形成。

矩阵 BFS 连通分量
前往题目

二分图检测

困难

给定一个图,判断它是否是二分图。二分图是可以将顶点分为两组,使得同一组内没有边连接的图。

BFS 着色
前往题目