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

最大生成树 prim

/* 邻接矩阵存储图 测试数据 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

你的代码太乱,给你这个,添加了注释,容易看懂: #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...

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

最小生成树是连通全局所有顶点边权值和最小的路径 而最短路径是从某结点出发到其他顶点距离最短的路径,虽然对该顶点而言,也是一棵生成树,并且可能某些边与最小生成树重合,但是并不能保证全局之和为最小,当然,某些特殊情况下也可能完全一致

//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; //图...

PrimMST(G,T,r){ //求图G的以r为根的MST,结果放在T=(U,TE)中 InitCandidateSet(…);//初始化:设置初始的轻边候选集,并置T=({r},¢) for(k=0;k

把main函数改成: main(){ GraphMatrix graph = { "abcd", {{7,8,Max,15},{12,100,6,20},{Max,100,4,13},{Max,4,8,10}}, }; Edge mst[Max]; int i,j; prim(graph,mst); for(j=0;j

Prim算法: #include #include typedef int VRType; typedef char InfoType; #define MAX_NAME 3 /*顶点字符串的最大长度+1*/ #define MAX_INFO 20 /*相关信息字符串的最大长度+1*/ typedef char VertexType[MAX_NAME]; #define INFINITY 32767 ...

图中存在多棵MST时,prim算法得到的树与起始点的选择有关。但即使固定起始点,无论prim还是kruskual,改变搜索顺序都可能生成不同的MST

Kruskal算法: void Kruskal(Edge E[],int n,int e) { int i,j,m1,m2,sn1,sn2,k; int vset[MAXE]; for (i=0;i

网站地图

All rights reserved Powered by www.pryy.net

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