图解算法通识讲义树与图

图论遍历、拓扑排序与并查集

核心心智模型:点线交织,防环染色;入度为零入队撕开依赖网,并查集瞬间连通岛屿。

核心交互式算法图解演练沙盒
图论遍历模型

图论广度优先搜索 (BFS) 队列层序扩散演练

步骤 1 / 4
当前 BFS 队列 Queue:[1]
时间: O(V + E) 线性图遍历
1
2
3
4

起始点入队:将源点 1 加入队列,标记 visited[1]=true,准备层序扩散遍历。

关键操作与时空复杂度速查对照表
操作 / 算法阶段平均时间最坏时间空间复杂度核心底层机制
邻接表图 DFS / BFSO(V + E)O(V + E)O(V)每个顶点访问一次,每条边检查一次。
拓扑排序判定O(V + E)O(V + E)O(V + E)入度为 0 节点流水线出队。
template.java
int[] inDegree = new int[numCourses];
List<List<Integer>> adj = new ArrayList<>();
for (int i = 0; i < numCourses; i++) adj.add(new ArrayList<>());
for (int[] p : prerequisites) {
    inDegree[p[0]]++;
    adj.get(p[1]).add(p[0]);
}
Queue<Integer> q = new LinkedList<>();
for (int i = 0; i < numCourses; i++) if (inDegree[i] == 0) q.offer(i);
int count = 0;
while (!q.isEmpty()) {
    int cur = q.poll(); count++;
    for (int next : adj.get(cur)) {
        if (--inDegree[next] == 0) q.offer(next);
    }
}
return count == numCourses;
解题核心心法提炼
  • 图的遍历核心在「防环」:必须通过 visited 数组或原地标记阻断回环死循环。
  • 拓扑排序是解决任务前置依赖与编译顺序的核心范式。
  • 并查集(Union-Find)具备近乎常数 O(α(N)) 的连通性判断与合并能力。
常见踩坑警示与避坑指南
  • 图的邻接表构建时有向边与无向边方向搞反。
  • 入度统计时漏算了自环或重复边。

对应 Hot 100 实战题目突围

原理已掌握!立即进入沉浸式工作台开始实战演练,强化代码肌肉记忆

查看全部题目