# 《代码随想录2-图论》正式出版
在这里,可以优惠购买《代码随想录2-图论》正版 (opens new window)
《代码随想录》和 《代码随想录2-图论》内容不一样, 《代码随想录》里没有图论,《代码随想录2-图论》单独讲解图论。
以下为 《代码随想录2-图论》出版的故事:
先上图,让大家看一看,《代码随想录2-图论》长什么样子:(封面是梵高的《罗纳河的星夜》)


回想起来,《代码随想录1》在 21年12月份正式出版。
当时出版后,迅速就成为了 编程类目图书的榜一,并且霸榜了长达一个月:

在《代码随想录1》出版后,录友们最大的诉求就是什么时候可以看到图论。
B站催图论评论已经排了很高的楼:

还有微信上来催图论的:

为什么大家会催图论?
因为 图论是数据结构与算法中非常重要的章节,也是大家编程比赛,求职笔试和面试,无论是社招还是校招,都会考察的知识内容。
而且图论应用广泛,在大家做项目开发的时候,或多或少都会用到图论相关知识。
例如:通信网络(拓扑排序、最短路算法),社交网络(深搜、广搜),路径优化(最短路算法),任务调度(拓扑排序),生物信息学(基因 为节点,基因关系 为边),游戏开发(A * 算法等)等等
所以我才会再次花这么大的力气 去更新图论。
从《代码随想录1》出版(21年12月)到今天,我做了这些事情:
更新《代码随想录1》教学视频(免费开放) + 更新图论文字教学(免费开放) + 更新 图论视频教学(免费开放) + 《代码随想录2-图论》正式出版 , 前后正好4年。
随着 《代码随想录2-图论》 的正式出版,图论这块工作,正式画上句号。
# 代码随想录的前世今生
代码随想录作为免费开源算法系列教程(图文 + 视频),帮助过非常多的录友。
几乎每天都会有录友在 公众号、B站,微信 还有其他平台来给我发来感谢消息:











也欢迎大家在本篇评论区分享自己和“代码随想录”的故事。
接下来,我们来说说,代码随想录的 前世今生。
# 代码随想录的前世:
是14年前,我开始在 CSDN上 写算法博客,

那时候,我没有想 以后 我会写 代码随想录,我仅仅是想把我所学记录下来。
写博客的习惯,我上大学 一直坚持到研究生再到工作。
我会把我对算法的理解,做过的题目,自己的思考,都写成博客。
不知不觉,其实我已经有了一套自己的知识体系,算法知识已经在我的头脑里有了一个学习顺序。
这个学习顺序,就是 大家现在看到的 代码随想录的雏形。
# 代码随想录的今生:
在 20年7月份,我开始着手写 《代码随想录》,并在 21年初的时候,把代码随想录的内容全部开源。
也是那一年,代码随想录网站诞生(programmercarl.com),并且代码随想录在Github上小有名气。
在 21年 11月份 《代码随想录1》正式出版,成为当时最火的技术类书籍。
《代码随想录1》出版后,我就在规划 图论 的内容。
为了让《代码随想录2-图论》可以延续 《代码随想录》的口碑,我做出了非常多的努力。
首先,就是把地基打扎实,如果之前的内容不能巩固好,维护好,而是赶时间去更新图论,只会“基础不牢、地动山摇” 。
所以在 2022年,我决定在B站(B站同名:代码随想录)上更新《代码随想录》讲解视频,花费了将近一年的时间,更新完毕,共140期算法视频,免费提供给大家学习。

这也让 《代码随想录》成为市面上,唯一一部 由作者亲自录制,配套免费视频讲解的技术图书。
同时 《代码随想录》配套专门的网站:programmercarl.com,同样供大家免费学习。
此时就形成:书 + 网站 + 视频,三维角度,一起帮助大家学好算法。
基础打牢之后,我便在2022年下旬开始图论的编写。
在 24年6月份,终于将图论写完,并发布到 代码随想录网站上,得到了录友们的一致好评。


这也给了我很大的底气,证明图论的精品内容确实是稀缺的,也确实可以给大家带来帮助。
那时候出版社已经催我出版了,但我想先给大家录图论的视频讲解,所以把出版这个事放下了。
虽然出图论视频这事 即辛苦,又耗时,也不赚钱,同时 发布算法视频 也播放量惨淡。
但我认为 提前把教学视频给大家录好了,是 “利在长远”。 既让大家可以看到免费的优质教学视频,同时我顺便再打磨打磨图论的内容。
而不是 火急火燎的 就把图论出版了。
接下来,我就开始更新 图论的算法视频,再用了 大半年,才将图论视频更新完毕。并免费分享给大家:

更新图论视频期间,出版社催我非常多次,让我赶快提交书稿,因为要错过了秋招前出版的时机(卖书的黄金期,例如6月份出版)。
不过我还是坚持先把图论视频给大家更新完了,所以我也成为了出版社眼里的“等等党”。
此时,我足足更新了 170期算法视频,把 《代码随想录1》 和 《代码随想录2》的内容,都亲自讲给大家听。
就这样,时间来到了 25年7月份。
我感觉这个时候可以全心整理书稿了(主要是修改图论的文字表达,满足出版的要求)。
到了今年10月份,也就是今天 1024 程序员节日,《代码随想录2-图论》正式出版!
以上就是我来时的路,看上去 好像寥寥几笔就概括了。其实每一步都有艰难的选择 和 选择后雷打不动的坚持。
在选择上,其实我有很多诱惑,再举个例子:我在这苦哈哈的写图论教程,录图论视频,还是免费的,而且还要干两三年才能完成。
看到同行们在录课赚钱,“那我是不是应该在代码随想录网站上 把图论改成收费章节,或者 文字免费 视频收费 会不会更好?”。
再或者,有这个大把的时间,我去做一套课程去卖,两三年的时候,我能出多少课程, 都可以赚不少。
这些诱惑,可能大家没有体会到。 而这些确实是我要面临的选择。
更多纠结与选择就不多说了,这不是本篇的重点咯。
# 关于图论
关于图论,可以说 是我算法创作过程中,所有主题里画图数量最多,工程量最大的一个主题。
我在写作的时候没有避开任何雷区,完全遇雷排雷,然后让大家舒舒服服的走过去。
什么是雷区?
很多图论知识点 ,大家去看书的时候会发现是 很多应该讲的算法没有讲,或者讲了但只说一下整体思路就过了。
因为这种知识点 很难讲清楚或者需要花费大量的时间去讲明白。
一些知识点是这样的:自己一旦懂了就知道是那么回事,但要写出来,要给别人讲清楚,是很难的一件事。
就拿图论来说:
- 深度优先搜索为何有两种写法?
- 同样执行广度优先搜索,为何某种写法会超时?
- Prim算法为什么和Dijkstra算法很像,相同点在哪,不同点在哪?
- 如果图中的边的权值为负数,为什么不能Dijkstra算法求解,Dijkstra算法盲区在哪?
- Bellman-Ford算法为何需要松弛n - 1次,多一次不行,少一次不行?
- 输入图的数据中,边的顺序 对 Bellman_ford算法有何影响?
- 负权回路对最短路径求解有何影响?
- SPFA(队列优化版Bellman-Ford) 是否可以判断负权回路?
- Bellman_ford算法可以求单源有限最短路,那么用SPFA是否也可以求解?用Dijkstra算法 是否可以求解?
- 实现Floyd 算法的代码中有三层for循环,为什么最外面那层for循环位置一定要固定?
等等,以上我只是列出一小部分,类似问题其实很多。
这些问题都不是算法的主要核心逻辑,但处处都能体现图论算法的细节,也能考察大家对图论算法的理解深度。
这一点大家在阅读《代码随想录2》的时候,可以感受到 我对细节讲解的把控程度。
为了把控《代码随想录2》的质量,我几乎看过了 市面上所有 有关图论的书,包括 海外经典算法书籍。
反复确认 思路正确性的同时,不仅感叹 市面上的算法书籍 在图论方面的 “缺斤少两” 。
而且没有科学的学习图论的顺序,讲解的顺序 都是 某种 “随机” 排列,这样读者学起来,经常不知道 不同算法之间的关系。
而在 《代码随想录2》,仅仅是 最短路算法方面,我就详细讲解了如下内容:
- dijkstra朴素版
- dijkstra堆优化版
- Bellman_ford
- Bellman_ford 队列优化算法(又名SPFA)
- bellman_ford 算法判断负权回路
- bellman_ford之单源有限最短路
- Floyd 算法精讲
- 启发式搜索:A * 算法
而且 我在编排顺序上,是很有考究的,一般是上一个算法解决不了的问题,我再引出下一个算法。
这一点,大家在看 《代码随想录2》最短路章节,可以细细体会。
《代码随想录2》将重新定义 学习图论知识的顺序。
# 本书目录

一些录友会问我:购买书,和在代码随想录网站(programmercarl.com)上学习,有什么区别。
网站的文章在表达上,相对随意一点。 而书上内容要更严谨一些。
作为出版物, 用词用句,都要严谨科学。我就在这方面 花了两个月的时间。
《代码随想录2》 这次采用全彩印刷,看起来更精美,全书共268页。



其实之所以使用彩色印刷,目标不是单纯为了精美,而且 图论里 很多图,需要有不同颜色对比,才能帮助大家理解这个图的意思。
# 购买方式
在这里可以优惠购买《代码随想录2-图论》正版 (opens new window)