面试知识库
进阶

图算法基础#

一句话答案#

图核心算法:BFS/DFS 遍历 O(V+E)、Dijkstra 单源最短路 O(ElogV)、拓扑排序(DAG)、Kruskal 最小生成树。

核心要点
算法用途时间
BFS最短路(无权)O(V+E)
DFS连通性/环检测O(V+E)
Dijkstra单源最短路(正权)O(ElogV)
拓扑排序DAG排序O(V+E)

存储: 邻接表(稀疏图) / 邻接矩阵(稠密图)

面试回答(2分钟版)

图算法面试核心是四个:BFS、DFS、Dijkstra和拓扑排序。BFS用队列实现,一层一层往外扩散,天然适合求无权图的最短路径,时间复杂度O(V+E)。DFS用栈或递归,一条路走到底再回头,适合判断连通性和检测环。Dijkstra解决带正权边的单源最短路,核心思想是贪心——每次从未确定的节点中选距离最小的,用优先队列优化后时间O(ElogV),但注意它不能处理负权边,负权要用Bellman-Ford。拓扑排序只能用在DAG(有向无环图),用入度表+BFS实现,典型应用是课程排课、任务调度。图的存储方面,稀疏图用邻接表省空间,稠密图用邻接矩阵方便查询。

追问与易错

追问方向:

  • “BFS 和 DFS 什么场景用哪个?”→ BFS 适合最短路径(无权图)、层序遍历;DFS 适合连通性判断、路径搜索、拓扑排序、强连通分量;空间上 BFS 用队列可能更大,DFS 用栈/递归
  • “Dijkstra 能处理负权边吗?”→ 不能,Dijkstra 基于贪心假设「已确定最短路的节点不会再被更新」,负权边会破坏这个假设;负权边用 Bellman-Ford(O(VE))或 SPFA
  • “怎么检测图中的环?”→ 无向图用 DFS 遇到已访问的非父节点即有环,或用并查集判断加边时是否已连通;有向图用 DFS 三色标记法,遇到灰色节点(正在访问)即有环

易错点:

  • ❌ DFS 能找最短路——无权图用 BFS 找最短路
  • ❌ Dijkstra 是万能最短路——不能处理负权