最小生成树的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
我们在前面讲过的《克里姆算法》是以某个顶点为起点,逐步找各顶点上最小权值的边来构建最小生成树的。同样的思路,我们也可以直接就以边为目标去构建,因为权值为边上,直接找最小权值的边来构建生成树也是很自然的想法,只不过构建时要考虑是否会形成环而已,此时我们就用到了图的存储结构中的边集数组结构,如图7-6- ...
分类:
编程语言 时间:
2018-02-26 11:39:28
阅读次数:
152
最小生成树 在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树。 例如,对于如上图G4所示的连通网可以有多棵权值总和不相同的生成树。 克鲁斯卡尔算法介绍 克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成 ...
分类:
编程语言 时间:
2018-02-24 11:44:43
阅读次数:
156
主要思想是贪心。 先将所有的边按照边权从小到大排序。 按照排好的顺序判断每一条边是否能够造成整个图中出现回路,如果不能则将该条边加入图中,并将两个顶点联通(并查集中的”并“)。 如果边的条数达到n-1,则跳出循环。此时得到的生成树便是最小生成树。 ...
分类:
编程语言 时间:
2018-02-23 19:06:34
阅读次数:
194
- 题目大意 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。因此求出最少的成本为多少? - 解题思路 最小生成树的问题,用kruskal算法,kruskal ...
分类:
其他好文 时间:
2018-02-15 13:36:37
阅读次数:
145
传统的Prim算法或者是Kruskal算法求最小生成树时,要先把图创建出来,就比较麻烦。 如果用并查集来解决,依次选取权值最小的边,判断它们是否在一个并查集内,如果在则舍去,如果不在则加入,简单了很多。 题目描述 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标 ...
分类:
其他好文 时间:
2018-02-13 20:59:22
阅读次数:
193
#include #include using namespace std; int f[20000],n; struct node { int u,v,val; bool operator >n) { ans=0; k=(n*(n-1))/2; for(int i=1;i>e[i].u>>e[i]... ...
分类:
编程语言 时间:
2018-02-12 16:45:15
阅读次数:
153
一、最小生成树(MST) ①、生成树的代价:设G=(V,E)是一个无向连通网,生成树上各边的权值之和称为该生成树的代价。 ②、最小生成树:在图G所有生成树中,代价最小的生成树称为最小生成树。 最小生成树的概念可以应用到许多实际问题中。 例:在n个城市之间建造通信网络,至少要架设n-1条通信线路,而每 ...
分类:
编程语言 时间:
2018-01-15 13:36:51
阅读次数:
184
对于一个无向带边权连通图G(V,E),我们一定能从中提取出最小生成树,那么对于次小生成树该如何获取?记图G中有效生成树集合为Z,而T为G的中的总权重最小的生成树,那么G\{T}中总权重最小的树就是次小生成树。 我们不妨先考虑这样一个问题,记T为图G中的最小生成树,由于生成树由|V|-1条边唯一决定, ...
分类:
编程语言 时间:
2018-01-12 22:39:07
阅读次数:
214