This commit is contained in:
programmercarl
2024-08-29 20:39:18 +08:00
parent 1609759238
commit 574cef48b3
30 changed files with 1686 additions and 236 deletions

239
problems/qita/tulunfabu.md Normal file
View File

@@ -0,0 +1,239 @@
# 图论正式发布!
录友们! 今天和大家正式宣布:大家期盼已久的「代码随想录图论」正式发布了。
**一年多来,日日夜夜,伏案编码、思考、写作,就为了今天给录友们一个交代**
我知道录友们在等图论等太久了,其实我比大家都着急。
![大家一直都在催](https://code-thinking-1253855093.file.myqcloud.com/pics/20240613105618.png)
图论完整版目前已经开放在代码随想录网站programmercarl.com
**「代码随想录图论」共分为 五大模块**,共有三十一篇长文讲解:
* 深搜与广搜
* 并查集
* 最小生成树
* 拓扑排序
* 最短路算法
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20240613104436.png)
**耗时一年之久,代码随想录图论 终于面世了**!
一年前 23年的3月份 我刚刚更新完了 [代码随想录算法公开课](https://mp.weixin.qq.com/s/xsKjrnB4GyWApm4BYxshvg) ,这是我亲自录制的 140期 算法视频讲解,目前口碑极佳。
录完公开课之后,我就开始筹划更新图论内容了,无奈图论内容真的很庞大。
关于图论章节,**可以说 是代码随想录所有章节里画图数量最多,工程量最大的一个章节**,整个图论 画图就400百多幅。
随便截一些图,大家感受一下:
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20240613104703.png)
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20240613104824.png)
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20240613104852.png)
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20240613104926.png)
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20240613105007.png)
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20240613105030.png)
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20240613105106.png)
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20240613105143.png)
具体内容大家可以去代码随想录网站programmercarl.com去看看非常精彩
期间有很多录友再催:**卡哥怎么不更新图论呢? 卡哥是不是不打算更新图论了** 等等
每次我都要去解释一波。
如果我想 快速出图论章节,可以很快!
**但我不想做 降低 代码随想录整体质量和口碑的事情**
所以关于现在发布的「代码随想录图论」,我可以很自信的说,**这是市面上大家能看到的,最全、最细致图论算法教程**。
**我在写作的时候没有避开任何雷区,完全遇雷排雷,然后让大家舒舒服服的走过去**
什么是雷区?
很多知识点 ,大家去看资料的时候会发现是 没有讲解的或者一笔带过, 因为这种雷区知识点 很难讲清楚或者需要花费大量的时间去讲明白。
一些知识点是这样的:**自己一旦懂了就知道是那么回事,但要写出来,要给别人讲清楚,是很难的一件事**。
这些知识点同样是雷区,就是大家在看 教程或者算法讲解的时候,作者避而不谈的部分。
例如: 深搜为什么有两种写法同样的广搜为什么有一种写法超时了bellman_ford 为什么 要松弛 n - 1次负权回路对最短路求解的影响 等等。
这一点大家在阅读代码随想录图论的时候,**可以感受到 我对细节讲解的把控程度**。
## 为什么要出图论
图论是很重要的章节,也是 大家求职笔试面试,无论是社招还是校招,都会考察的知识内容。
而且图论应用广泛,在大家做项目开发的时候,或多或少都会用到图论相关知识。
例如通信网络拓扑排序、最短路算法社交网络深搜、广搜路径优化最短路算法任务调度拓扑排序生物信息学基因为节点基因关系为边游戏开发A * 算法等)等等
为了保质保量更新图论,**市面上所有的算法书籍,我都看过**
**反复确认 思路正确性的同时,不仅感叹 市面上的算法书籍 在图论方面的 “缺斤少两**” 。
大名鼎鼎的《算法4》 以图论内容详细且图解多 而被大家好评,
以最短路算法为例《算法4》只讲解了 Dijkstra(堆优化)、SPFA Bellman-Ford算法基于队列 和 拓扑排序,
而 dijkstra朴素版、Bellman_ford 朴素版、bellman_ford之单源有限最短路、Floyd 、A * 算法 以及各个最短路算法的优劣,并没有讲解。
其他算法书籍 更是对图论的很多知识点一笔带过。
而在 代码随想录图论章节,**仅仅是 最短路算法方面,我就详细讲解了如下内容**
* dijkstra朴素版
* dijkstra堆优化版
* Bellman_ford
* Bellman_ford 队列优化算法又名SPFA
* bellman_ford 算法判断负权回路
* bellman_ford之单源有限最短路
* Floyd 算法精讲
* 启发式搜索A * 算法
**常见最短路算法,我都没有落下**
而且大家在看很多算法书籍是没有编程题目配合练习,这样学习效果大打折扣, 一些书籍有编程题目配合练习但知识点严重不全。
## 出题
我在讲解图论的时候,最头疼的就是找题,在力扣上 找题总是找不到符合思路且来完整表达算法精髓的题目。
特别是最短路算法相关的题目,例如 Bellman_ford系列 Floyd A * 等等总是找不到符合思路的题目。
所以我索性就自己出题吧,**这也是 卡码网kamacoder.com诞生的一个原因之一**。
**为了给大家带来极致的学习体验,我在很多细节上都下了功**夫。
卡码网专门给大家准备的ACM输入输出模式**图论是在笔试还有面试中通常都是以ACM模式来考察大家**,而大家习惯在力扣刷题(核心代码模式),核心代码模式对图的存储和输出都隐藏了。
**图论题目的输出输出相对其他章节的题目来说是最难处理的**
### 输入的细节
图论的输入难在 图的存储结构,**如果没有练习过 邻接表和邻接矩阵 ,很多录友是写不出来的**。
而力扣上是直接给好现成的 数据结构,可以直接用,所以练习不到图的输入,也练习不到邻接表和邻接矩阵。
ACM输入输出模式是最考察候选人对代码细节把控程度。
如果熟练ACM模式那么核心代码模式基本没问题但反过来就不一定了。
### 输出的细节
同样,图论的输出也有细节,例如 求节点1 到节点5的所有路径 输出可能是:
```
1 2 4 5
1 3 5
```
表示有两条路可以到节点5 那储存这个结果需要二维数组最后在一起输出力扣是直接return数组就好了但 ACM模式要求我们自己输出这里有就细节了。
就拿 只输出一行数据,输出 `1 2 4 5` 来说,
很多录友代码可能直接就这么写了:
```CPP
for (int i = 0 ; i < result.size(); i++) {
cout << result[i] << " ";
}
```
这么写输出的结果是 `1 2 4 5 ` 发现结果是对的一提交发现OJ返回 格式错误 或者 结果错误。
如果没练习过这种输出方式的录友,就开始怀疑了,这结果一样一样的,怎么就不对,我在力扣上提交都是对的!
**大家要注意5 后面要不要有空格**
上面这段代码输出5后面是加上了空格了如果判题机判断 结果的长度,标准答案`1 2 4 5`长度是7而上面代码输出的长度是 8很明显就是不对的。
所以正确的写法应该是:
```CPP
for (int i = 0 ; i < result.size() - 1; i++) {
cout << result[i] << " ";
}
cout << result[result.size() - 1];
```
这么写,最后一个元素后面就没有空格了。
这是很多录友经常疏忽的,也是大家刷习惯了 力扣(核心代码模式)根本不会注意到的细节。
**同样在工程开发中,这些细节都是影响系统稳定运行的因素之一**
**ACM模式 除了考验算法思路,也考验 大家对 代码的把控力度** 而 核心代码模式 只注重算法的解题思路,所以输入输出这些就省略掉了。
## 情怀
大家可以发现,**现在 用心给大家更新硬核且免费资料的博主 已经不多了**。
这一年的空闲时间,如果我用来打磨付费课程或者付费项目,或者干脆把图论做成付费专栏 加上现在的影响力,一定可以 “狠狠赚一笔”。
对我来说,有些钱可以赚,有些钱不赚。
如果持续关注代码随想录的录友可以发现:代码随想录不仅仅优质题解和视频免费,还有 [ACM模版配套25题](https://mp.weixin.qq.com/s/ai_Br_jSayeV2ELIYvnMYQ)、 [设计模式精讲配套23题](https://mp.weixin.qq.com/s/Wmu8jW4ezCi4CQ0uT9v9iA)、[每周举办大厂笔试真题(制作真题是十分费时的)](https://mp.weixin.qq.com/s/ULTehoK4GbdbQIdauKYt1Q) 这些都是免费优质资源。
**在付费与免费之间,我一直都在努力寻找平衡**
很多录友之所以付费加入 [知识星球](https://mp.weixin.qq.com/s/65Vrq6avJkuTqofnz361Rw) 或者 [算法训练营](https://mp.weixin.qq.com/s/vkbcihvdNvBu1W4-bExoXA) ,也是因为看了这些免费资源想支持我一下。
“不忘初心”,说出来很容易,**但真正能随着岁月的流淌 坚持初心,是非常非常难的事情**。
**诱惑太多!有惰性的诱惑,有利益的诱惑**
正如我之前说的:“代码随想录” 这五个字,我是会用一生去经营。
**免费硬核的算法内容是 代码随想录的立身之本**,也是 大家为什么学算法学编程首选代码随想录的根本所在。
当大家通过 代码随想录 提升了编程与算法能力,考上研或者找到好工作的时候,于我来说已经是很幸福的事情:
![对笔试帮助大](https://code-thinking-1253855093.file.myqcloud.com/pics/20230914172536.png)
![华为od将近满分](https://code-thinking-1253855093.file.myqcloud.com/pics/20230914172607.png)
![研究生复试](https://code-thinking-1253855093.file.myqcloud.com/pics/20240621103130.png)
![红包感谢代码随想录366](https://code-thinking-1253855093.file.myqcloud.com/pics/20231123151310.png)
![上岸亚马逊](https://code-thinking-1253855093.file.myqcloud.com/pics/20240206174151.png)
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20220718094112.png)
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20220718094332.png)
至此**图论内容 已完全免费开放在代码随想录网站programmercarl.com造福广大学习编程的录友们**
Github 也已经同步 https://github.com/youngyangyang04/leetcode-master 关于其他语言版本欢迎录友们去仓库提交PR
## 后序
关于图论PDF版本我后面会整理出来免费发放给大家。
关于图论视频版本不出意外应该在年底开始在B站更新同样免费开放。
总之,代码随想录会持续更新下去,无论是文字版还是视频版。
希望大家 不用 非要到找工作的时候 或者要考研的时候 才想到代码随想录。
**代码是作品,算法更是艺术**,时不时来欣赏一段解决关键问题的优雅代码,也是一种享受。
最后,**愿录友们学有所成,归来仍看代码随想录**