三九宝宝网宝宝百科宝宝知识

怎样用prim算法求全部最小生成树

02月28日 编辑 39baobao.com

[怎样生成最小的DirectFB]本文介绍了怎样生成一个最小(或接近最小)的DirectFB,以及相关的测试用例的安装和测试,对编译中的参数MMX,SSE,SDL,VNC的概念给出了较为详细的介绍 实验平台: FC5(Fedora Core5) Direct...+阅读

把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{

printf("%c\t",mst[j].stop_vex);

printf("%c\t",mst[j].start_vex);

printf("%d\n",mst[j].weight);

}

}

还有graphmatrix结构体里的vexs数组最好定义为vexs[vn+1]给字符串末尾的‘\0'留地方。

急!数据结构最小生成树prim算法C语言实现

Kruskal算法:

void Kruskal(Edge E[],int n,int e)

{

int i,j,m1,m2,sn1,sn2,k;

int vset[MAXE];

for (i=0;i

k=1; //k表示当前构造最小生成树的第几条边,初值为1

j=0; //E中边的下标,初值为0

while (k

{

m1=E[j].u;m2=E[j].v; //取一条边的头尾顶点

sn1=vset[m1];sn2=vset[m2]; //分别得到两个顶点所属的集合编号

if (sn1!=sn2) //两顶点属于不同的集合,该边是最小生成树的一条边

{

printf(" (%d,%d):%d/n",m1,m2,E[j].w);

k++; //生成边数增1

for (i=0;i

if (vset[i]==sn2) //集合编号为sn2的改为sn1

vset[i]=sn1;

}

j++; //扫描下一条边

}

}

Prim算法:

void prim(MGraph g,int v)

{

int lowcost[MAXV],min,n=g.vexnum;

int closest[MAXV],i,j,k;

for (i=0;i

{

lowcost[i]=g.edges[v][i];

closest[i]=v;

}

for (i=1;i

{

min=INF;

for (j=0;j

if (lowcost[j]!=0 & lowcost[j]

{

min=lowcost[j];k=j;

}

printf(" 边(%d,%d)权为:%d/n",closest[k],k,min);

lowcost[k]=0; //标记k已经加入U

for (j=0;j

if (g.edges[k][j]!=0 & g.edges[k][j]

{

lowcost[j]=g.edges[k][j];closest[j]=k;

}

}

}

利用Prim普里姆算法构造最小生成树程序

算法同样是解决最小生成树的问题。 其算法为:在这n个点中的相通的边进行排序,然后不断地将边添加到集合中(体现了贪心的算法特点),在并入集合之前,必须检查一下这两点是不是在一个集合当中,这就用到了并查集的知识。直到边的集合达到了n-1个。 与prim算法的不同:prim算法为单源不断寻找连接的最短边,向外扩展,即单树形成森林。而Kruskal算法则是不断寻找最短边然后不断将集合合并,即多树形成森林。 复杂度的不同:prim算法的复杂度是O(n^2),其中n为点的个数。Kruskal算法的复杂度是O(e*loge),其中e为边的个数。两者各有优劣,在不同的情况下选择不同的算法。 Prim算法用于求无向图的最小生成树 设图G =(V,E),其生成树的顶点集合为U。 ①、把v0放入U。 ②、在所有u∈U,v∈V-U的边(u,v)∈E中找一条最小权值的边,加入生成树。

③、把②找到的边的v加入U集合。如果U集合已有n个元素,则结束,否则继续执行②。 其算法的时间复杂度为O(n^2) Prim算法实现:(1)集合:设置一个数组set(i=0,1,..,n-1),初始值为 0,代表对应顶点不在集合中(注意:顶点号与下标号差1) (2)图用邻接阵表示,路径不通用无穷大表示,在计算机中可用一个大整数代替。 {先选定一个点,然后从该点出发,与该点相连的点取权值最小者归入集合,然后再比较在集合中的两点与其它各点的边的权值最小者,再次进入集合,一直到将所有的点都归入集合为止。} 虽然以前做过,不过现在还要修改,内容太多,我分2部分说明!以下是程序 /*普里姆算法构造最小生成树*/ #define MAXVEX 30 #define MAXCOST 1000 void prim(int c[MAXVEX][MAXVEX],int n) /*己知图的顶点为{1,2,...,n},c[i][j]和c[j][i]为边(i,j)的权,打印最小生成树 的每条边*/ { int i,j,k,min,lowcost[MAXVEX],closest[MAXVEX];; for (i=2;i

实现prim算法或kruscal算法中的一种最小生成树算法

Prim算法:#include#includetypedef int VRType; typedef char InfoType;#define MAX_NAME 3/*顶点字符串的最大长度+1*/#define MAX_INFO 20/*相关信息字符串的最大长度+1*/ typedef char VertexType[MAX_NAME];#define INFINITY 32767/*用整型最大值代替无穷大*/#define MAX_VERTEX_NUM 20/*最大顶点个数*/ typedef enum{DG,DN,AG,AN} GraphKind;/*{有向图,有向网,无向图,无向网}*/ typedef int PathMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef int ShortPathTable[MAX_VERTEX_NUM]; typedef struct { VRType adj; /*顶点关系类型。对无权图,用1(是)或0(否)表示相邻否*/ /*对带全图,则为权值类型*/ InfoType *info; /*该弧相关信息的指针(可无)*/ }ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef struct { VertexType vexs[MAX_VERTEX_NUM]; /*顶点向量*/ AdjMatrix arcs; /*邻接矩阵*/ int vexnum,arcnum; /*图的当前顶点数和弧数*/ GraphKind kind; /*图的种类标志*/ }MGraph; int LocateVex(MGraph G,VertexType u) { /*初始条件:图G存在,u和G中顶点有相同特征*/ /*操作结果:若G中存在顶点u,则返回该顶点在图中位置;否则返回-1*/ int i; for(i=0;i

以下为关联文档:

如何快速生成随机数 RSA算法可以采用32bit RSA算法 设A从2~(N-1) C=(A EXP D) mod N 满足如下条件: D是素数,N是两个素数(P,Q)之积, (D * E) mod ((P-1) * (Q-1))=1 因为:若 C=(A EXP D)mod N 有: A=(C EXP E)...

Kruskal算法和Prim算法构造它的一棵最小代价生成树的过程Prim算法复杂度:O(n2), 与边无关,适合求边稠密的网的最小生成树。 算法思想:假设N={V,{E}}是连通网,TE是N上最小生成树中边的集合。算法从U={u0},TE ={}开始,重复执行下述操作:在所...

利用Prim普里姆算法构造最小生成树程序算法同样是解决最小生成树的问题。 其算法为:在这n个点中的相通的边进行排序,然后不断地将边添加到集合中(体现了贪心的算法特点),在并入集合之前,必须检查一下这两点是不是在一个...

无权无向图只给出节点个数怎么用Prim算法求最小生成Prim算法的主要运行时间花在过程②的选边中。看起来复杂度是O(VE)=O(V^3)不是么,效率也太低了吧…… 为了比较快速地选边,我们用两个数组lowcost、closest动态地维护每一个点...

利用kruska prim算法求解图的最小生成树并比较算法的效率adjmatrix GA 邻接矩阵GA struct edgeset { int fromvex; 起始点 int endvex; 终点 int weight; 权值 } void prim(adjmatrix GA,edgeset CT,int n) { int i,j,k,min,t,m,w; fo...

生成树协议的演进是怎样的和其他协议一样,生成树协议也是随着网络的不断发展而不断更新换代的。本文按照技术发展的主线,介绍了生成树协议的发展历程、近期热点和未来的发展方向。 生成树协议是一种二...

java随机生成10个60 100的随机整数用选择排序的算法按从大到小public class random { public static void main(String[] args) { int[] a = new int[10]; int n = 0; while (n < 10) { int b = (int) (Math.random() * 100) + 1; if (b...

asp生成html全部ID该怎样生成'只要将你上面的代码打包成一个函数就可以了: function createhtml(id) dim f,name,html,strout,fso set f=server.createobject("adodb.recordset")f.open "select * from temp...

请问什么是珠心算法 ?哪里有珠心算法的全部视频1、概念 珠心算又称珠算式心算或珠脑速算。珠心算是将数变成脑海中算盘上的算珠进行计算的一种方法。它是在珠算的基础上发展而成的。目前在东南亚一带甚为流行,日本、新加坡...

推荐阅读
图文推荐