最小生成树的Prim算法 思想:采用子树延伸法 将顶点分成两类: 生长点——已经在生成树上的顶点 非生长点——未长到生成树上的顶点 使用待选边表: 每个非生长点在待选边表中有一条待选边,一端连着非生长点,另一端连着生长点 步骤: 步骤1)构造初始待选边表,任选一个顶点v作为初始生长点,对其余每个非生 ...
分类:
编程语言 时间:
2018-03-05 17:07:30
阅读次数:
225
图的最优化问题:最小生成树、最短路径 典型的图应用问题 无向连通加权图的最小生成树 有向/无向加权图的最短路径 四个经典算法 Kruskal算法、Prim算法 最小生成树 Dijkstra算法、Floyd算法 最短路径 最小生成树的概念: G=(V,E):无向连通加权图 C(e)或C(v,w): 边 ...
分类:
编程语言 时间:
2018-03-05 17:03:34
阅读次数:
251
这里是kruskal做法 当然prim也可以,至于prim和kruskal的比较: Prim在稠密图中比Kruskal优,Kruskal在稀疏图中比Prim优。 ...
分类:
其他好文 时间:
2018-03-04 13:05:48
阅读次数:
168
构建完MST后,枚举非树边(u,v,w),在树上u->v的路径中找一条权值最大的边(权为maxn),替换掉它这样在 w=maxn 时显然不能满足严格次小。但是这个w可以替换掉树上严格小于maxn的次大边用倍增维护MST上路径的最大值、次大值,每条非树边的查询复杂度就为O(logn) ps:1.倍增更 ...
分类:
其他好文 时间:
2018-03-01 00:36:08
阅读次数:
182
"题目链接" 构建完MST后,枚举非树边(u,v,w),在树上u v的路径中找一条权值最大的边(权为maxn),替换掉它 这样在 w=maxn 时显然不能满足严格次小。但是这个w可以替换掉树上严格小于maxn的次大边 用倍增维护MST上路径的最大值、次大值,每条非树边的查询复杂度就为O(logn) ...
分类:
其他好文 时间:
2018-02-28 22:56:38
阅读次数:
198
T1,T3不提。 T2城市建设,注意: 1.城市建造顺序按h从大到小排序,顺序与边无关;2.i,j之间连边的代价为:(h[i]>h[j]) (b[i]+b[j])*r+(a[i]-b[i])*b[j]*h[i]+(a[j]-b[j])*a[i]*h[j];3.赋好边权后跑最小生成树 错误代码如下: ...
分类:
其他好文 时间:
2018-02-28 21:40:51
阅读次数:
185
我们在前面讲过的《克里姆算法》是以某个顶点为起点,逐步找各顶点上最小权值的边来构建最小生成树的。同样的思路,我们也可以直接就以边为目标去构建,因为权值为边上,直接找最小权值的边来构建生成树也是很自然的想法,只不过构建时要考虑是否会形成环而已,此时我们就用到了图的存储结构中的边集数组结构,如图7-6- ...
分类:
编程语言 时间:
2018-02-26 11:39:28
阅读次数:
152
考察并查集,运用kruskal的思想很好做。注意几个小问题即可。 ...
分类:
其他好文 时间:
2018-02-25 19:09:06
阅读次数:
171
数据结构与算法系列 目录 最近抽空整理了"数据结构和算法"的相关文章。在整理过程中,对于每种数据结构和算法分别给出"C"、"C++"和"Java"这三种语言的实现;实现语言虽不同,但原理如出一辙。因此,读者在了解和学习的过程中,择其一即可! 下面是整理数据数据和算法的目录表,对于每一种按照C/C++ ...
分类:
编程语言 时间:
2018-02-24 15:09:34
阅读次数:
239
最小生成树 在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树。 例如,对于如上图G4所示的连通网可以有多棵权值总和不相同的生成树。 克鲁斯卡尔算法介绍 克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成 ...
分类:
编程语言 时间:
2018-02-24 11:44:43
阅读次数:
156