图算法

一句话说明

图算法本质上是在一堆“点和关系”里回答四类问题:能不能到、最短多远、怎样最低成本连起来、依赖顺序怎么排。

先判断题目属于哪一类

flowchart TD
    A["看到点、边、路径、依赖、联通"] --> B{"题目在问什么?"}
    B -- "能否到达 / 连通块 / 所有路径" --> C["遍历:DFS / BFS"]
    B -- "最少步数 / 最短距离" --> D["最短路"]
    B -- "最小成本把所有点连起来" --> E["最小生成树"]
    B -- "先做谁后做谁 / 是否有环" --> F["拓扑排序"]
    B -- "图里有哪些强结构" --> G["强连通分量 / 二分图 / 桥和割点"]

最常见选择题

刷题时先看这张分流表

题目特征优先算法为什么
无权图、每条边代价一样、问最少步数[[图的遍历/DFS与BFSBFS]]
边权只有 0/1[[高级专题/0-1 BFS0-1 BFS]]
边权非负[[最短路径/单源最短路径Dijkstra]]
允许负权边[[最短路径/单源最短路径Bellman-Ford]]
要求所有点对最短路[[最短路径/多源最短路径Floyd-Warshall]]
问依赖顺序、课程安排、是否有环[[最小生成树与拓扑排序/拓扑排序拓扑排序]]
问“用最小代价连接所有点”[[最小生成树与拓扑排序/最小生成树最小生成树]]
问无向图连通块、枚举路径、回溯搜索[[图的遍历/DFS与BFSDFS]]

图算法知识地图

flowchart LR
    A["图算法"] --> B["图的基础"]
    A --> C["遍历"]
    A --> D["最短路径"]
    A --> E["生成树 / DAG"]
    A --> F["连通性"]
    A --> G["高级专题"]

    B --> B1["表示方式"]
    C --> C1["DFS"]
    C --> C2["BFS"]
    D --> D1["单源最短路"]
    D --> D2["多源最短路"]
    E --> E1["MST"]
    E --> E2["拓扑排序"]
    F --> F1["SCC / 桥 / 割点 / 二分图"]
    G --> G1["0-1 BFS / 欧拉路 / 网络流"]

📚 目录结构

1. 图的基础

  • 图的表示:邻接矩阵、邻接表、边集数组怎么选

2. 图的遍历

  • DFS与BFS:什么时候该“走到底”,什么时候该“按层推”

3. 最短路径

4. 最小生成树与拓扑排序

5. 连通性问题

6. 高级专题

🧠 看到题目时怎么快速识别

题面信号词大概率方向
最少步数、最少操作次数、最短跳跃次数BFS
最小距离、最小花费、最早到达、网络延迟最短路
课程安排、依赖、先修关系、任务调度拓扑排序
最低成本连接所有城市 / 所有点最小生成树
联通块数量、省份数量、岛屿数量DFS / BFS / 并查集
每条边都要走一次欧拉路径
两种颜色分组、冲突关系二分图

📊 常用算法复杂度

类别算法时间复杂度空间复杂度备注
遍历DFS / BFSO(V + E)O(V)每个点边最多进处理流程一次
单源最短路DijkstraO((V + E)\log V)O(V)适合非负权图
单源最短路Bellman-FordO(VE)O(V)能处理负权边
全源最短路Floyd-WarshallO(V^3)O(V^2)点不大时可用
生成树KruskalO(E\log E)O(V)常配合并查集
生成树PrimO((V + E)\log V)O(V + E)稠密图也常见
DAGKahn / DFS 拓扑O(V + E)O(V)DAG 线性排序
连通性TarjanO(V + E)O(V)SCC / 桥 / 割点

🎯 建议学习顺序

  1. 先学 图的表示,理解邻接表和边集数组。
  2. 再学 DFS 与 BFS,这是所有图题的底盘。
  3. 接着学 单源最短路径,把 BFS、Dijkstra、Bellman-Ford 的边界分清。
  4. 然后学 最小生成树 和 拓扑排序。
  5. 最后补 强连通分量、二分图、网络流 等专题。

🎯 LeetCode 起步清单

类型题目核心算法
图遍历200. 岛屿数量DFS / BFS
图遍历797. 所有可能的路径DFS 回溯
无权最短路1091. 二进制矩阵中的最短路径BFS
非负权最短路743. 网络延迟时间Dijkstra
负权 / 有限制松弛787. K 站中转内最便宜的航班Bellman-Ford 变形
最小生成树1584. 连接所有点的最小费用Kruskal / Prim
拓扑排序207. 课程表Kahn
二分图785. 判断二分图BFS / DFS 染色

相关主题


返回:算法学习导航