最小生成树
给定一个无向图,如果它的某个子图中任意两个顶点都互相连通并且是一棵树,那么这棵树就叫做生成树,如果边上有权值,那么使得边权和最小的生成树叫做最小生成树。
常见的求解最小生成树的算法有Kruskal算法和Prim算法,生成树是否存在和图是否连通是等价的,所以假定图是连通的。
Prim算法
假设有一棵只包含一个顶点v的数T,然后贪心地选取T和其他顶点之间相连的最小权值的边,并把它加...
分类:
编程语言 时间:
2015-03-10 21:36:15
阅读次数:
225
一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法求出。
克鲁斯卡尔(Kruskal)算法(只与边相关)
算法描述:克鲁斯卡尔算法需要对图的边进行访问,所以克鲁斯卡尔算法的时间复杂度只和边又关系,可以证明其时间复杂度为O(eloge)。...
分类:
编程语言 时间:
2015-03-10 17:16:34
阅读次数:
168
1、概念:给定一个带权的无向连通图,如何选取一棵生成树,使树上所有边上权的总和为最小,这叫最小生成树.
2、应用:例如:要在n个城市之间铺设光缆,主要目标是要使这
n 个城市的任意两个之间都可以通信,但铺设光缆的费用很高,且各个城市之间铺设光缆的费用不同,因此另一个目标是要使铺设光缆的总费用最低。这就需要找到带权的最小生成树。
3、求最小生成树的算法
3.1 普里姆(Prim)算...
分类:
编程语言 时间:
2015-03-10 12:13:41
阅读次数:
261
1 # include 2 3 # define MAX_VERTEXES 100//最大顶点数 4 # define MAXEDGE 20//边集数组最大值 5 # define INFINITY 65535//代表不可能的数(无穷大)...
分类:
编程语言 时间:
2015-03-03 18:34:20
阅读次数:
145
1.题目描述:点击打开链接
2.解题思路:本题实质上还是利用Kruskal算法来生成MST。首先按照边权值由小到大排序,对于一个连续的边集[L,R],如果使得这n个点全部连通,则一定存在一个苗条度不超过w[R]-w[L]的生成树。因此,可以从小到大枚举L,对于每一个L,利用Kruskal算法生成最小生成树后,计算苗条度,用ans取最小的即可。如果枚举结束后ans依然是INF。那么输出-1。这里可...
分类:
其他好文 时间:
2015-02-28 16:38:49
阅读次数:
159
Problem Description
某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。
Input
测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编...
分类:
编程语言 时间:
2015-02-23 15:33:00
阅读次数:
207
这题就是用最小生成树中的kruskal算法的模板题。
#include
#include
#include
#include
#include
using namespace std;
const int N=1002;
const int M=15002;
const int inf=1<<28;
struct edge
{
int u,v,cost;
}es[M];
int...
分类:
Web程序 时间:
2015-02-22 11:08:47
阅读次数:
157
在边赋权图中,权值总和最小的生成树称为最小生成树。构造最小生成树有两种算法,分别是prim算法和kruskal算法。在边赋权图中,如下图所示: 在上述赋权图中,可以看到图的顶点编号和顶点之间邻接边的权值,若要以...
分类:
编程语言 时间:
2015-02-14 07:39:16
阅读次数:
215
上一篇中写了图的最小生成树求法一——Kruskal算法 http://blog.csdn.net/wtyvhreal/article/details/43526695
这一篇中用另外一种方法来求解图的最小生成树,Prim算法。
图中随便选一个顶点开始,看看这个顶点有哪些边,在它的边中找一条最短的。1号有1-2,1-3,其中1-2短,选择1-2.通过它把1和2连接在一起。接下来开始枚举1...
分类:
编程语言 时间:
2015-02-05 16:36:13
阅读次数:
135
求下图的最小生成树:
数据给出如下:
第一行有两个数,n表示n个城市,m表示m条道路,接下来的m行,每行三个数a,b,c表示城市a到城市b的路程c。
现在需要解决的是,要求要最少的边让图连通(任意两点之间可以互相到达)。要想让n个顶点的图连通,那么至少需要n-1条边。其实这里就是求一个图的最小生成树。
基本思路:
首先按照边的权值进行从小到大排...
分类:
编程语言 时间:
2015-02-05 15:06:45
阅读次数:
141