搜索与图论
小满不吃香菜
这个作者很懒,什么都没留下…
展开
-
堆优化Dijkstra求最短路
时间复杂度 O(mlogn), n 表示点数,m 表示边数,适合稀疏图,用邻接表存储 模板 typedef pair<int, int> PII; int n; // 点的数量 int h[N], w[N], e[N], ne[N], idx; // 邻接表存储所有边 int dist[N]; // 存储所有点到1号点的距离 bool st[N]; // 存储每个点的最短距离是否已确定 // 求1号点到n号点的最短距离,如果不存在,则返回-1 i原创 2020-11-13 19:10:15 · 133 阅读 · 0 评论 -
朴素Dijkstra求最短路
迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。 朴素Dijkstra适用于求稠密图,时间复杂度n * n,用邻接矩阵求存储。 思想:看的我们数据结构老师的ppt看懂的 例如从起点1到其他点的最短距离 代码模板 int Dijkstra(){.原创 2020-11-09 11:16:36 · 1020 阅读 · 10 评论 -
树和图的深度优先搜索(应用:树的重心)
树和图的存储 树是一种没有闭环的无向图,无向图是一种特殊的有向图。因此我们只要表示出有向图就可以了。有向图的表示有两种,分别是邻接矩阵和邻接表。用的比较多的是邻接表。邻接表的结构就是一个数组拉一个链表 数组建立邻接表 //邻接表 int h[N], e[N * 2], ne[N * 2], idx; void add(int a, int b) { e[idx] = b, ne[idx] = h[a], h[a] = idx++; } 树的bfs模板 邻接表: 1 -> 2 2 ->原创 2020-11-03 19:28:18 · 454 阅读 · 0 评论