这门课到底讲什么

先把话说清楚:这门课讲的是图论算法,用 Java 来实现。它属于算法基础课,不是 Java 语法课,也不是后端项目课。资料包里那份摘要是错的——里面提到的 Vue、前端工程化、Linux 运维、云计算认证,和图论没有半点关系,大概是套模板套串了。你如果冲着那些来,现在就可以关掉页面。

真正会碰到的内容,是图这种数据结构本身:怎么用邻接表和邻接矩阵把一个图存进内存,深度优先和广度优先怎么在图上跑起来,然后是一连串看起来像“数学题”的名字——最小生成树、最短路径、拓扑排序、并查集、二分图、网络流。这些名字背后都是具体问题:导航怎么算最快路线,任务排期怎么判断有没有循环依赖,社交网络里两个人隔了几层。

先看哪几讲,哪些可以缓一缓

如果你的图论基础是零,建议老老实实从图的表示开始。很多人一上来就想学 Dijkstra,结果连邻接表都写不顺手,后面全是夹生饭。前几讲慢一点没关系,把“一个图在代码里长什么样”这件事弄扎实,后面每一讲都轻松一点。

中间部分的顺序大致可以这样安排:先 DFS/BFS,这是所有图算法的手脚;再并查集和最小生成树,这两个门槛不高、成就感来得快;然后是最短路径,从无权图的 BFS 版本过渡到 Dijkstra,再到处理负权边的 Bellman-Ford,最后才是 Floyd。这个顺序不能乱,跳着看容易崩。

有几块可以暂时跳过,不用有心理负担:网络流、二分图匹配这些,属于竞赛和特定场景才用得上,日常面试和软考里出现频率低。第一遍学的时候先放过去,等你把前面的路走顺了再回来。硬啃只会让你在半路放弃。

Java 在这里扮演什么角色

课程用 Java 写,但重点不在语言特性。你会用到集合类来建图,用优先队列来实现 Dijkstra,用递归或显式栈来实现深搜。如果你 Java 只是“能看懂、写不顺”,图论课会同时暴露两个问题:算法没听懂,代码也敲不出来。

一个务实的做法是:每讲听完,先别看答案,自己拿纸把思路写一遍,再照着思路敲代码。敲不出来就回去看,看完再关掉敲一遍。这门课的价值不在“看过”,而在“自己写出来过”。手写一遍邻接表建图,比看十遍讲解有用。

资料和练习怎么配合

配套的章节笔记适合课后复盘,但不建议边听边抄。第一遍听的时候专心理解思路,听完再翻笔记对照,看自己漏了哪一步。笔记里如果有代码,也尽量先自己写,再对答案。

练习量不用大,但要重复。同一个最短路问题,换一种图的形态再写一遍——这次是有向图,下次是带权图,再下次是稀疏图。图算法的坑大多藏在边界情况里:孤立点、自环、重边、不连通。每写一次就多碰到一个。

最后提醒一句节奏。图论是那种“卡住很正常”的内容,某一讲看三遍还不明白是常有的事。别怀疑自己,隔一天再看,或者先跳到下一讲,回头往往就通了。慢慢来,比赶进度划算。


image.webp 下载附件   保存到相册 2025-6-21 15:03 上传

课程推荐

《玩转算法系列--图论精讲 (Java版)》image.webp 下载附件   保存到相册 2025-6-21 15:03 上传【技能收获】学完可掌握:Java 后端开发、Vue / 前端工程化。课程以实战为导向,覆盖从基础概念到完整项目落地的关键步骤,配套章节笔记便于课后复盘与面试前快速回顾。【学习建议】建议按目录顺序学习,先打基础再进入综合实战章节;每完成 2~3 节可结合笔记整理一份学习小结,最终尝试独立复现一套完整 Demo 写入个人作品集。【就业发展】可面向岗位:Linux 运维工程师、SRE、云计算工程师、DevOps 工程师。云原生与自动化运维仍是企业 IT 刚需方向,认证 + 实战项目组合能显著提升面试通过率,适合向中高级运维或架构岗进阶。 若你已有一定编程或运维基础,本课程可帮助你在现有技能栈上快速叠加热门方向能力,提升求职时的项目说服力与薪资谈判空间。

视频目录(123 节)

*   1-1  欢迎大家来到《玩转图论算法》  (1952).mp4

*   1-2 图论到底有什么用?  (1957).mp4

*   1-3 课程编程环境的搭建  (1224).mp4

*   2-1 图的分类  (1344).mp4

*   2-2 图的基本概念  (2009).mp4

*   2-3 图的基本表示:邻接矩阵  (2006).mp4

*   2-4 更多图的方法  (1402).mp4

*   2-5 图的基本表示:邻接表  (1936).mp4

*   2-6 邻接表的实现  (1736).mp4

*   2-7 邻接表的问题和改进  (1509).mp4

*   2-8 实现邻接表的改进  (1732).mp4

*   2-9 图的基本表示的比较  (1413).mp4

*   3-1 数据结构遍历的意义  (1309).mp4

*   3-2 从树的深度优先遍历,到图的深度优先遍历  (1305).mp4

*   3-3 DFS逻辑的微观解读  (2021).mp4

*   3-4 实现图的深度优先遍历  (1448).mp4

*   3-5 图的深度优先遍历的改进  (1606).mp4

*   3-6 更多关于图的深度优先遍历  (1018).mp4

*   4-1 图的连通分量的个数  (0943).mp4

*   4-2 DFS中的一个技巧  (1432).mp4

*   4-3 求解联通分量  (1036).mp4

*   4-4 单源路径问题  (1001).mp4

*   4-5 单源路径问题的编程实现  (2134).mp4

*   4-8 提前结束递归:路径问题的另一个优化  (1906).mp4

*   4-9 无向图的环检测  (1631).mp4

*   4-10 二分图检测  (1102).mp4

*   4-11 实现二分图检测  (1215).mp4

*   4-12 本章小结和更多拓展  (1512).mp4

*   5-1 从树的广度优先遍历,到图的广度优先遍历  (1407).mp4

*   5-2 图的 BFS 的实现  (1321).mp4

*   5-3 使用 BFS 求解路径问题  (2023).mp4

*   5-8 BFS 的重要性质  (1629).mp4

*   5-9 无权图的最短路径  (1433).mp4

*   5-10 BFS 和 DFS 的神奇联系,与本章小结  (1344).mp4

*   6-1 算法笔试面试中的图论问题书写  (1826).mp4

*   6-2 图的建模和二维网格中的小技巧  (2021).mp4

*   6-3 编程实现图的建模  (2006).mp4

*   6-4 floodfill 算法  (1547).mp4

*   6-5 更多 floodfill 的问题  (1617).mp4

*   7-1 算法笔试面试中的 BFS 问题  (2115).mp4

*   7-2 图论建模的核心:状态表达  (1542).mp4

*   7-3 实现转盘锁问题  (2441).mp4

*   7-4 一道智力题  (1914).mp4

*   7-5 代码实现一道智力题  (2252).mp4

*   7-6 Leetcode 上一个困难的问题  (1707).mp4

*   7-7 实现滑动谜题  (1313).mp4

*   7-8 图论搜索和人工智能  (1816).mp4

*   8-1 什么是桥  (1130).mp4

*   8-2 寻找桥的算法思路  (1433).mp4

*   8-3 模拟寻找桥算法  (1743).mp4

*   8-4 实现寻找桥算法  (2134).mp4

*   8-5 图的遍历树  (1512).mp4

*   8-6 寻找割点的算法思路  (1400).mp4

*   8-7 实现寻找割点算法  (1533).mp4

*   8-8 本章小结:关于变量语义,和如何书写正确的算法  (1004).mp4

*   9-1 哈密尔顿回路和 TSP  (1653).mp4

*   9-2 求解哈密尔顿回路的算法  (1452).mp4

*   9-3 实现哈密尔顿回路的算法  (2039).mp4

*   9-4 哈密尔顿回路算法的一个优化  (1227).mp4

*   9-6 Leetcode 上的哈密尔顿问题  (1833).mp4

*   9-7 状态压缩  (2148).mp4

*   9-8 基于状态压缩的哈密尔顿算法  (1402).mp4

*   9-9 记忆化搜索  (1844).mp4

*   9-10 哈密尔顿回路和哈密尔顿路径小结  (0510).mp4

*   10-1  什么是欧拉回路  (1345).mp4

*   10-2 欧拉回路的存在性及证明  (1935).mp4

*   10-3 实现欧拉回路存在性的判断  (0937).mp4

*   10-4 求解欧拉回路的三种算法  (1713).mp4

*   10-5 Hierholzer 算法模拟  (1351).mp4

*   10-6 实现 Hierholzer 算法  (2126).mp4

*   10-7  欧拉路径和本章小结  (0748).mp4

*   11-1 带权图及实现  (1832).mp4

*   11-2 Map 的遍历  (0950).mp4

*   11-3 最小生成树和 Kruskal 算法;  (1200).mp4

*   11-4 切分定理  (1355).mp4

*   11-5 Kruskal 算法的实现  (1610).mp4

*   11-6 并查集动态环检测  (1603).mp4

*   11-7  Prim 算法的原理及模拟  (0905).mp4

*   11-8 实现 Prim 算法  (1322).mp4

*   11-9 Prim 算法的优化  (1815).mp4

*   11-10 本章小结和更多关于最小生成树问题的讨论  (1052).mp4

*   12-1 有权图的最短路径问题  (1128).mp4

*   12-2 Dijkstra 算法的原理和模拟  (1829).mp4

*   12-3 实现 Dijkstra 算法  (1919).mp4

*   12-4  Dijkstra 算法的优化  (1829).mp4

*   12-5 更多关于 Dijkstra 算法的讨论  (1603).mp4

*   12-6 Bellman-Ford 算法  (1441).mp4

*   12-7 负权环  (2133).mp4

*   12-8 实现 Bellman-Ford 算法.  (1722).mp4

*   12-9 更多关于 Bellman-Ford 算法的讨论  (1413).mp4

*   12-10  Floyd 算法  (2105).mp4

*   12-11 实现 Floyd 算法  (1501).mp4

*   12-12 本章小结和更多关于最短路径问题的讨论  (1258).mp4

*   13-1 有向图的实现  (2055).mp4

*   13-2 有向图算法  (2018).mp4

*   13-3 有向图环检测和 DAG  (1903).mp4

*   13-4 有向图的度入度和出度  (1237).mp4

*   13-5 有向图求解欧拉回路  (1900).mp4

*   13-6  拓扑排序  (1706).mp4

*   13-7  拓扑排序算法的实现  (1254).mp4

*   13-8 另一个拓扑排序算法  (1125).mp4

*   13-9 另一个拓扑排序算法的实现  (0840).mp4

*   13-10 有向图的强连通分量  (2037).mp4

*   13-11  Kosaraju 算法  (1939).mp4

*   13-12 Kosaraju 算法的实现  (2309).mp4

*   13-13  有向图算法小节  (1025).mp4

*   14-1 网络流模型和最大流问题  (1543).mp4

*   14-2 Ford-Fulkerson 思想  (2108).mp4

*   14-3 Edmonds-Karp 算法   (1526).mp4

*   14-4 最大流算法的基本架构  (1915).mp4

*   14-5 实现 Edmonds-Karp 算法   (1945).mp4

*   14-6 Edmonds-Karp 算法的测试和更多讨论  (1254).mp4

*   14-7  网络流问题建模  (1945).mp4

*   14-8 本章小结和更多相关讨论  (0810).mp4

*   15-1  最大匹配和完美匹配  (0836).mp4

*   15-2 使用最大流算法解决匹配问题  (0851).mp4

*   15-3 实现二分图匹配算法  (2035).mp4

*   15-4 通过 Leetcode 的一个 Hard 问题,看匹配算法建模  (2418).mp4

*   15-5 匈牙利算法  (2437).mp4

*   15-6 匈牙利算法的实现  (2546).mp4

*   15-7 基于递归实现的匈牙利算法  (1738).mp4

*   15-8 匹配问题小结  (0541).mp4

*   16-1 更广阔的图论算法世界  (2358).mp4