基础数据结构(1)
摘要:
单链表与双链表的用处 单链表 单链表的存储: 单链表的几种操作 在表头插入一个数:先将这个数指向head指向的数,再将head指向这个数 在表中的第k位后面插入一个数:先将这个数指向第k位指向的数,再将第k位指向这个数 在表中删除一个数:让这个数直接指向下一个数的下一个数 代码实现: // e是所有
最短路算法笔记
摘要:
最短路算法 最短路算法可大致分为三类:无负权边的单源最短路,有负权边的单源最短路和多源汇最短路 dijkstra 算法 dijkstra 算法是求无负权边的单源最短路的常用算法,基于贪心的思想 其过程大致为: 找到距离已经确定最短路的连通块的最近的点 把他加入已经确定最短路的连通块 用这个点去更新其
二分图
摘要:
二分图 可以将一个图分为两部分,这两部分内部没有边,都是由一部分连向另外一部分 那么就称这个图为二分图 染色法判别二分图 如何判断二分图 不含奇数环是一个充要条件 只要没有奇数环,就是一个二分图,只要是一个二分图,就没有奇数环 所以我们可以通过染色的方式来判别一个图是不是二分图 首先选一个没有染色的
最小生成树
摘要:
最小生成树 最小生成树的算法有两种 我们一般遇到稠密图都会用到朴素版Prim,稀疏图都会用Kruskal 因为这样代码最短 朴素版Prim算法 Prim根dijkstra长得特别像 算法实现: #include <iostream> #include <cstring> #include <algo
最短路
摘要:
最短路算法 最短路的分类 根据不同的需求选择不同的最短路算法 图论的算法考试的侧重点在建图和算法实现 所以证明并不是那么重要 朴素版dijkstra算法 基于贪心 算法实现: #include<iostream> #include<cstring> #include<algorithm> using
拓扑排序
摘要:
拓扑排序 拓扑序列是关于有向图的 拓扑序列: 对于图中的每条边(x, y),x在序列A中都出现在y之前,则称A是该图的一个拓扑序列 也就是说,把图中每一个点按拓扑序排好后,每一个点都是从前指向后的 如果一个图中有环,那么一定没法展成拓扑序 所以我们也称有向无环图为拓扑图 有向图中每一个点有入度和出度
树与图的存储与遍历
摘要:
树图的存储与遍历 树是特殊的图,是无环连通图,所以只需要看图的存储 图分为两种:有向图和无向图 无向图可以看为有向图,把所有无向边都存两个有向边即可 有向图的存储: 邻接矩阵,g[a][b]存储a->b n^2,适合存储稠密图 邻接表(n个单链表)(推荐) 使用邻接表存储 树与图的dfs和bfs与搜
基础搜索
摘要:
基础搜索 深度优先搜索(dfs, 栈实现) dfs十分简单,不搜到最后不会往回走 只需要一个例题就可以整明白dfs是怎么应用的 全排列问题 给定一个n,输出n的全排列 分析: 每增加一个数字就向下搜到一个节点 我们从第一个开始搜,直到搜到第n个数字结束 搜的过程中记录搜过了那个数字,之后就不能搜这个
哈希
摘要:
哈希表 哈希表是将值域比较大但数量比较少的数快速插入与查找的数据结构 哈希表有两种写法,一种是拉链法,一种是开放寻址法 拉链法 拉链法的核心思想是将一个大数取模,如 x mod N 具体做法就是将模完的这个数映射到与它相同的数组下标,并从这一位拉一个单链表 如图: 例题代码如下: #include