#搜索#
1.BFS最短路性质
边的权重为1时,BFS有最短路性质,DFS不具有
2.应用场景
BFS:最小步数,最短距离,最少操作几次
DFS:算法思路比较奇怪,对空间要求比较高
3.DFS回溯和剪枝
DFS,又称爆搜,搜索顺序可以看成一棵树
DFS回溯(恢复现场):每完成一次DFS之后紧接着就是恢复现场,即dfs和回溯要在一个区域块之内
DFS剪枝:提前判断当前方案是否合法,如果不合法就没必要往下搜了,字节回溯
有最优性剪枝,可行性剪枝
4.BFS一般需要用到queue
#图#
1.树是一种特殊的图,无环连通图
2.图:有向图,无向图,无向图可以看做特殊的有向图(一条无向变可以看做是两条有向边),所以我们一般考虑有向图就行了
3.有向图的存储:
(1)邻接矩阵(二维数组):空间复杂度O(n^2),比较浪费空间,使用较少,且不能体现重边,因此比较适合存贮不需要考虑重边的稠密图
(2)邻接表(单链表):空间复杂度O(n),每个点都有一个单链表,用来存贮从这个点出发可以走到那些点,插入时使用头插法,单链表的次序是无关紧要的,适合稀疏图
注意:区分顶点和顶点下标
基本上邻接表存储的都是顶点下标,而最短路径dist数组以及状态数组st,队列中的元素存储的都是顶点,不要搞混了。
4.树和图的遍历(因为数可以看做特殊的图,所以我们只考虑图就行了)
(1)DFS、BFS
(2)因为深度和宽度有限搜索只会遍历一次,所以要设置一个bool数组保存某个点有没有遍历过
5.拓扑序列
(1)图的宽度优先遍历的一个应用
(2)针对有向图,无向图没有拓扑序列概念
(3)所有的边都是从前指向后,不可能有环
(4)拓扑图:有向无环图
6.最短路
(1)源点:起点 汇点:终点
(2)稠密图:m~n^2 稀疏图:m~n (m表示边,n表示点)
(3)考察核心:建图(把