This commit is contained in:
programmercarl
2024-05-31 10:12:41 +08:00
parent 7fc8aa199a
commit 5fabc5c1e0
9 changed files with 721 additions and 20 deletions

View File

@@ -3,50 +3,78 @@
从深搜广搜 到并查集,从最小生成树到拓扑排序, 最后是最短路算法系列。
至此算上本篇一共30篇文章,图论之旅就在此收官了。
在[0098.所有可达路径](./0098.所有可达路径.md) ,我们接触了两种图的存储方式,邻接表和邻接矩阵,数量掌握两种图的存储方式很重要。
这也是大家习惯在核心代码模式下刷题 经常忽略的 知识点。因为在力扣上刷题不需要掌握图的存储方式。
至此算上本篇一共32篇文章,图论之旅就在此收官了。
在[0098.所有可达路径](./0098.所有可达路径.md) ,我们接触了两种图的存储方式,邻接表和邻接矩阵,掌握两种图的存储方式很重要。
图的存储方式也是大家习惯在核心代码模式下刷题 经常忽略的 知识点。因为在力扣上刷题不需要掌握图的存储方式。
## 深搜与广搜
在二叉树章节中,其实我们讲过了 深搜和广搜在二叉树上的搜索过程。
在图论章节中,深搜与广搜就是在图这个数据结构上的搜索过程。
深搜与广搜是图论里基本的搜索方法,大家需要掌握三点:
* 搜索方式:深搜是可一个方向搜,不到黄河不回头。 广搜是围绕这起点一圈一圈的去搜。
* 代码模板:需要熟练掌握深搜和广搜的基本写法。
* 应用场景:图论题目基本上可以即用深搜也可广搜,无疑是用哪个方便而已
* 应用场景:图论题目基本上可以即用深搜也可广搜,无疑是用哪个方便而已
### 注意事项
同样是深搜模板题,会有两种写法
需要注意的是,同样是深搜模板题,会有两种写法
在[0099.岛屿的数量深搜.md](./0099.岛屿的数量深搜.md) 和 [0105.有向图的完全可达性](./0105.有向图的完全可达性.md)涉及到dfs的两种写法。
我们对dfs函数的定义是 是处理当前节点 还是处理下一个节点 很重要决定了两种dfs的写法。
**我们对dfs函数的定义是 是处理当前节点 还是处理下一个节点 很重要**决定了两种dfs的写法。
这也是为什么很多录友看到不同的dfs写法结果发现提交都能过的原因。
而深搜还有细节,有的深搜题目需要回溯,有的就不用回溯,
而深搜还有细节,有的深搜题目需要用到回溯的过程,有的就不用回溯的过程
需要计算路径的问题,一般需要回溯,如果只是染色问题 就不需要回溯。
一般是需要计算路径的问题 需要回溯,如果只是染色问题(岛屿问题系列) 就不需要回溯。
例如: [0105.有向图的完全可达性](./0105.有向图的完全可达性.md) 深搜就不需要回溯,而 [0098.所有可达路径](./0098.所有可达路径.md) 中的递归就需要回溯,文章中都有详细讲解
注意:以上说的是不需要回溯,不是没有回溯,只要有递归就会有回溯,只是我们是否需要用到回溯这个过程,这是需要考虑的。
很多录友写出来的广搜可能超时了, 例如题目:[0099.岛屿的数量广搜](./0099.岛屿的数量广搜.md)
注意:以上说的是不需要回溯,不是没有回溯,只要有递归就会有回溯,只是我们是否需要用到回溯这个过程 才是要考虑的
根本原因是**只要 加入队列就代表 走过,就需要标记,而不是从队列拿出来的时候再去标记走过**。
具体原因,我在[0099.岛屿的数量广搜](./0099.岛屿的数量广搜.md) 中详细讲了。
广搜注意事项,很多录友写广搜超时了。
在深搜与广搜的讲解中,为了防止惯性思维,我特别加入了题目 [0106.岛屿的周长](./0106.岛屿的周长.md),提醒大家,看到类似的题目,也不要上来就想着深搜和广搜。
深搜和广搜是图论的基础,也有很多变形,我在图论里用最大岛屿问题,讲了很多
还有一些图的问题,在题目描述中,是没有图的,需要我们自己构建一个图,例如 [0110.字符串接龙](./0110.字符串接龙.md),题目中连线都没有,需要我们自己去思考 什么样的两个字符串可以连成线。
## 并查集
并查集相对来说是比较复杂的数据结构,其实他的代码不长,但想彻底学透并查集,需要从多个维度入手,
我在理论基础篇的时候 讲解如下重点:
* 为什么要用并查集怎么不用个二维数据或者set、map之类的。
* 并查集能解决那些问题,哪些场景会用到并查集
* 并查集原理以及代码实现
* 并查集写法的常见误区
* 带大家去模拟一遍并查集的过程
* 路径压缩的过程
* 时间复杂度分析
上面这几个维度 大家都去思考了,并查集基本就学明白了。
其实理论基础篇就算是给大家出了一道裸的并查集题目了,所以在后面的题目安排中,会稍稍的拔高一些,重点在于并查集的应用上。
[0108.冗余连接](./0108.冗余连接.md) [0109.冗余连接II](./0109.冗余连接II.md)
后面的两道题目,[0108.冗余连接](./0108.冗余连接.md) 和
## 最小生成树
## 拓扑排序