图配置与控制

图类型与基本参数

图参数配置

(5-15)

动画速度

5

操作控制

图可视化

当前栈状态

栈顶
栈为空
未访问节点
当前节点
已访问节点
栈中节点

遍历记录

步骤 操作 节点 说明

代码执行

void DFS(Graph G, int v) { visited[v] = true; // 访问顶点v cout << v << " "; // 将v压入栈中 stack.push(v); // 遍历所有邻接点 for (int i = 0; i < G.adj[v].size(); i++) { int w = G.adj[v][i]; if (!visited[w]) { // 递归访问未访问的邻接点 DFS(G, w); } } // 处理完所有邻接点后,将v弹出栈 stack.pop(); }
当前步骤说明
尚未开始遍历,请点击"开始遍历"按钮。

深度优先搜索(DFS)介绍

算法原理

深度优先搜索是一种用于遍历或搜索图和树的算法,它从根节点开始,沿着一条路径尽可能深入,直到无法继续前进时回溯。

DFS算法步骤

  1. 选择起点选择一个起始顶点,并标记为已访问
  2. 深度探索对于当前顶点的每个未访问的邻接点,递归执行DFS
  3. 回溯处理当顶点的所有邻接点都处理完后,回溯到前一个顶点
  4. 继续探索重复上述过程,直到图中所有可达顶点都被访问

时间复杂度

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

空间复杂度

O(V)
用于标记已访问顶点和递归调用栈

算法应用

拓扑排序

为有向无环图的顶点排序,使得所有边都从序号较小指向序号较大的顶点

路径查找

在图中查找从源顶点到目标顶点的路径

连通分量

识别图中的强连通分量或无向图中的连通分量

环检测

检测图中是否存在环路,特别是在有向图中

相关练习

找出所有路径

中等难度

给定一个图和两个顶点s和t,使用DFS找出从s到t的所有可能路径。

DFS 路径
前往题目

岛屿数量

中等难度

给定一个由'1'(陆地)和'0'(水)组成的二维网格地图,计算岛屿的数量。一个岛被水包围,并且由相邻陆地水平或垂直连接形成。

矩阵 DFS 连通分量
前往题目

课程表

困难

现在你总共有n门课需要选,标记为0到n-1。某些课程可能有先修课程,比如如果想选择课程0,你必须先完成课程1,表示为[0,1]。请判断是否可能完成所有课程的学习?

有向图 拓扑排序 环检测
前往题目