跳到主要内容
约 2 分钟1 张卡

图

图由顶点和边组成,适合表达连接、依赖和状态转换。选择算法前,应先确定方向、权重与状态的身份;同一业务可以因建模方式不同而产生不同的图。

1. 面试核心​

先记住这几条,再读正文
  • 邻接表占用 O(V+E) 空间,邻接矩阵占用 O(V²) 空间。
  • 普通 BFS 在边成本相同时求最少边数路径;DFS 常用于可达性和完整遍历。
  • 有环图需要访问标记,非连通图需要从多个未访问顶点开始。

2. 顶点、方向与权重​

“课程 A 是 B 的前置”可表示为 A → B;“城市之间有道路”可能需要无向边或两条方向不同的边。若道路长度不同,最少经过道路数不等于总距离最短。

0: [1, 2]
1: [2]
2: []

这是一个有向邻接表,表示 0→1、0→2、1→2。判断 0 是否直接连接 2 需要检查 0 的邻居;矩阵可以 O(1) 判断某条边是否存在,但无论边多少都需保存 V² 个位置。

3. 搜索与访问状态​

邻接表完整 DFS/BFS 读取每个顶点和每条边有限次,时间 O(V+E)。对矩阵逐行寻找邻居时,时间通常为 O(V²)。无向边可能存储两次,这不会改变渐近复杂度。

图中 0→1→2→0 构成环。不标记访问过的顶点会反复扩展。BFS 通常在入队时标记,避免同一顶点被多个前驱重复加入。实现及层次推导见树与图搜索。

4. 使用边界​

只从一个起点搜索只能覆盖其可达部分。统计全图连通分量时,要遍历顶点集合,对未访问顶点再次搜索。网格、字符串变换等隐式图还需明确合法邻居与状态判等方法。

带权最短路、拓扑排序、路径枚举各有额外约束。特别是“全局已访问”适合可达性搜索,但枚举不同路径时可能需要仅标记当前路径并在回退时撤销,否则会误删合法答案。

5 · 面试题卡片​

先想答案,再翻面题目来自公开面经。点任意一张进入翻卡,可左右切换,看完回到这里。
逐张翻看 1 张 →

5.1 邻接表和邻接矩阵如何选择,复杂度有什么区别?​

出现公司:暂无已核验的公开来源(本站自测)

考察重点:图的稀疏程度、边查询成本与邻居遍历成本。

相关内容:面试核心、顶点、方向与权重、使用边界。

参考回答

稀疏图通常用邻接表,空间 O(V+E),遍历邻居与实际边数相关。矩阵占 O(V²),但直接查询两个顶点间是否有边是 O(1),适合规模较小且频繁查边的情况。完整搜索在邻接表上通常 O(V+E),矩阵上找邻居通常需要 O(V²)。

6. 参考资料​