图论

图论题研究的是节点以及节点之间的连接关系。题目不一定会直接给出“图”:网格中的格子可以看成节点,相邻关系可以看成边;依赖关系、道路和社交关系也都可以抽象成图。

常见题型

题型常用方法识别特征
连通分量BFS、DFS、并查集判断哪些节点彼此可达,或统计互不连通的区域数量
最短路径BFS、Dijkstra、Bellman-Ford求从起点到终点的最少步数或最小代价
拓扑排序入度表、BFS、DFS任务存在先后依赖,需要判断能否完成或给出执行顺序
最小生成树Kruskal、Prim用最小总代价连接所有节点
二分图染色 BFS、染色 DFS判断节点能否分成两个集合,使每条边都跨集合连接

网格为什么也是图

对于二维网格,可以把每个格子看成一个节点。如果题目规定只能向上、下、左、右移动,那么一个格子最多与四个相邻格子之间存在边。这样,网格上的搜索就转化成了图的遍历。

以“岛屿数量”为例:

  • 每块陆地是一个节点;
  • 相邻的两块陆地之间有一条边;
  • 一座岛屿就是一个连通分量;
  • 对每个尚未访问的陆地执行一次 BFS 或 DFS,就能统计连通分量数量。

题目列表

题目核心方法图论模型
200. 岛屿数量BFS / DFS网格图中的连通分量