www.pryy.net > 最大生成树 prim

最大生成树 prim

prim算法是一颗最小生成树中不断加点的贪心算法,支持向一颗最小生成树中加点的操作。而kurscal算法是将边排序以后贪心地加入,并用并查集维护连通性。两个算法实现复杂度都为O(nlogn),一般来说kurscal算法的常数要小于prim

你发代码上来,不然没办法帮你看。

//prim算法 #include using namespace std; #define MAXVEX 10 #define MAX 65000 typedef char VexType; typedef float AdjType; struct GraphMatrix { VexType vexs[MAXVEX]; //顶点信息 AdjType arcs[MAXVEX][MAXVEX]; //边信息 int n; //图...

在图论中,Prim算法是计算最小生成树的算法,而Dijkstra算法是计算最短路径的算法。二者看起来比较类似,因为假设全部顶点的集合是V,已经被挑选出来的点的集合是U,那么二者都是从集合V-U中不断的挑选权值最低的点加入U,那么二者是否等价呢?...

/* 邻接矩阵存储图 测试数据 6 10 1 2 6 1 3 1 1 4 5 2 3 5 2 5 3 3 4 5 3 5 6 3 6 4 4 6 2 5 6 6 */ #include #include #define N 100 int p[N], key[N], tb[N][N]; void prim(int v, int n) { int i, j; int min; for (i = 1; i

应该不一样.可以用一个图根据两算法试一下,若一样,再修改图,之后应该就可以了. (百度或者查书本更加有效……) 构造G的最小生成树的Prim算法的基本思想是:首先置S={1},然后,只要S是V的真子集,就作如下的贪心选择:选取满足条件iS,jɨ...

你的图里有两条边权重一样,在实际计算前无法事先保证最小生成树的唯一性,即使是两个不同的Prim算法也可能产生不同的结果 当然,计算完之后情况会略有不同,下面会解释 Prim算法首先会依次选 E(1,2)=1 E(2,7)=2 E(2,3)=3 然后E(3,4)=E(7,6)=4,...

不唯一,两种算法构造出的最小生成不一定相同。

你的代码太乱,给你这个,添加了注释,容易看懂: #include#include#includeusing namespace std;#define MAX_VERTEX_NUM 20#define OK 1#define ERROR 0#define MAX 1000typedef struct Arcell{double adj;}Arcell,AdjMatrix[MAX_VERTEX_NUM][M...

原理就是做个堆 保存所有未加入的点到当前强连通分量的距离 这样每次选取只需要O(1) 维护用O(logN) 比直接枚举选点的O(N)要快 代码(这个写的还可以 能当模板用): #include #include #define INF 0xfff #define typec Node #define parent(i) ...

网站地图

All rights reserved Powered by www.pryy.net

copyright ©right 2010-2021。
www.pryy.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com