基础
图论理论基础
对于图,有向,无向,权值,度,出度,入度,连通性(连通图,强连通图,连通分量,强连通分量),图的构造(朴素存储,邻接矩阵,邻接表),图的遍历(DFS 深度优先搜索,BFS 广度优先搜索)都进行了介绍
www.programmercarl.com/kamacoder/%…
深搜理论基础 DFS
DFS和BFS的区别
- dfs是可一个方向去搜,不到黄河不回头,直到遇到绝境了,搜不下去了,再换方向(换方向的过程就涉及到了回溯)。
- bfs是先把本节点所连接的所有节点遍历一遍,走到下一个节点的时候,再把连接节点的所有节点遍历一遍,搜索方向更像是广度,四面八方的搜索过程。
DFS 深搜三部曲
- 确定递归函数
func dfs(curNode *Node)
- 确定终止条件
if (终止条件) {
存放结果;
return;
}
- 确定递归逻辑
for (选择:本节点所连接的其他节点) {
处理节点;
dfs(图,选择的节点); // 递归
回溯,撤销处理结果
}
BFS 代码实现
www.programmercarl.com/kamacoder/图…
BFS需要用到队列来实现
刷题
- 可达路径
总结
路径总和II 的path可以变成[]int 类型吗?可以,但依然需要对每一次递归的path复制到一个新的对象来append 到result中,因为切片类型的参数,传递的是切片的头和长度,而不是切片的底层数组,当修改底层数组的元素是引用传递,而扩容数组不会影响外面的切片,因为长度不变。