算法总结第5弹,最小生成树,有关生成树的问题有很多,这里先介绍个最常用的吧。
最小生成树
首先,生成树是建立在无向图中的,对于有向图,则没有生成树的概念,所以接下来讨论的图均默认为无向图。对于一个有n个点的图,最少需要n-1条边使得这n个点联通,由这n-1条边组成的子图则称为原图的生成树。一般来说,一个图的生成树并不是唯一的(除非原图本身就是一棵树)。
现在考虑带权图G,即图的边带权,则...
分类:
编程语言 时间:
2014-12-30 15:15:26
阅读次数:
341
使用克鲁斯卡尔算法最小生成树,采用的数据结构是三元组边表集,采用了快排和并查集,代码很简洁,效率也高。和前面两个求最小生成树算法一样,程序还能自动生成图信息,快来看看吧。...
分类:
编程语言 时间:
2014-12-01 22:29:54
阅读次数:
271
定义:在有向图上的最小生成树。
算法过程:和最小生成树一样,不过这个不是无向图的,但是也可以用类似的算法,最小树形图的第一个算法数朱刘算法,依据最小生成树数算法形成的。
我们知道,在最小生成树算法中,我们每次选长度最短的边,如果满足条件则加入最小生成树中,知道所有的点都在树中,最小树形图同样。
首先和最小生成树一样,首先必须保证图联通,否则不能形成最小树形图。
但是由于是有向的,而...
分类:
Web程序 时间:
2014-10-31 11:55:30
阅读次数:
246
题目链接:http://poj.org/problem?id=1251思路:使用最小生成树算法,可以求解。需要注意的树Kruskal算法中使用了并查集,对于并查集用法需要注意。代码:#include #include using namespace std;const int N = 30, M =...
分类:
其他好文 时间:
2014-10-23 20:32:48
阅读次数:
204
队列: 先进先出(FIFO)。优先级队列: 在优先级队列中,数据项按照关键字的值有序,关键字最小的数据项总在对头,数据项插入的时候会按照顺序插入到合适的位置以确保队列的顺序,从后往前将小于插入项的数据项后移。在图的最小生成树算法中应用优先级队列。示例代码:package chap04.Queue;c...
分类:
编程语言 时间:
2014-10-14 17:49:59
阅读次数:
230
克鲁斯卡尔算法(Kruskal's algorithm)是两个经典的最小生成树算法的较为简单理解的一个。这里面充分体现了贪心算法的精髓。大致的流程能够用一个图来表示。这里的图的选择借用了Wikipedia上的那个。很清晰且直观。首先第一步,我们有一张图,有若干点和边例如以下图所看到的:第一步我们要做...
分类:
编程语言 时间:
2014-10-13 21:00:27
阅读次数:
211
克鲁斯卡尔算法(Kruskal's algorithm)是两个经典的最小生成树算法的较为简单理解的一个。这里面充分体现了贪心算法的精髓。大致的流程能够用一个图来表示。这里的图的选择借用了Wikipedia上的那个。很清晰且直观。首先第一步,我们有一张图,有若干点和边例如以下图所看到的:第一步我们要做...
分类:
编程语言 时间:
2014-10-11 17:40:45
阅读次数:
208
树的定义:连通无回路的无向图是一棵树。有关树的问题:1、最小生成树。2、次小生成树。3、有向图的最小树形图。4、LCA(树上两点的最近公共祖先)。5、树的最小支配集、最小点覆盖、最大独立集。一、最小生成树解决的问题是:求无向图中边权值之和最小的生成树。算法有Kruskal和Prim。Kruskal使...
分类:
其他好文 时间:
2014-09-27 20:08:50
阅读次数:
285
克鲁斯卡尔算法(Kruskal's algorithm)是两个经典的最小生成树算法的较为简单理解的一个。这里面充分体现了贪心算法的精髓。大致的流程能够用一个图来表示。这里的图的选择借用了Wikipedia上的那个。很清晰且直观。首先第一步,我们有一张图,有若干点和边例如以下图所看到的:第一步我们要做...
分类:
其他好文 时间:
2014-09-26 14:04:38
阅读次数:
245
克鲁斯卡尔算法(Kruskal's algorithm)是两个经典的最小生成树算法的较为简单理解的一个。这里面充分体现了贪心算法的精髓。大致的流程可以用一个图来表示。这里的图的选择借用了Wikipedia上的那个。非常清晰且直观。
首先第一步,我们有一张图,有若干点和边。
第一步我们要做的事情就是将所有的边的长度排序,用排序的结果作为我们选择边的依据。这里再次体现了贪心算法的思想。资源...
分类:
其他好文 时间:
2014-09-11 15:23:52
阅读次数:
197