网站大量收购独家精品文档,联系QQ:2885784924

用Prim算法构造最小生成树.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用Prim算法构造最小生成树 用Prim算法构造最小生成树 用Prim算法构造最小生成树 适用标准文案 用 Prim 算法结构最小生成树 班级: 2010 级计算机 1 班 学号: 2010131116 姓名:杨才 一、实验目的 认识最小生成树的观点,掌握生成最小生成树的方法 。 二、实验内容 成立一个含随意结点的无向连通网,并用 Prim 算法结构其最小生成树 三、实验重点及说明 假如无向连通图是一个网, 则其全部生成树中必有一棵树的边的权值总和最小,这棵生成树为最小生成树。 Prim 算法:在图 G=(V,E)(V 为极点集, E 为边集)中任选一极点 v0, 令会合 U={v0} 为初态,在一个极点在 U中,另一极点在 V-U 中的全部边中找权值最小的边( u,v )(U∈ u,v ∈ V-U ),并将 v 加入 到 U中,同时将边( u,v )加入会合 T 中( T 的初态为空集),这样不停地扩大 U,直至 U=V,则会合 T 中的边为所求最小生成树的边 四、算法思想与算法描绘 1、毗邻矩阵的数据种类的定义以下: typedef struct { int no; /* 极点编号 */ string name; /* 极点其余信息 */ } VertexType; /* 极点种类 */ typedef struct /* 图的定义 */ { int edges[MAXV][MAXV]; /* 毗邻矩阵 */ int vexnum,arcnum; /* 极点数 , 弧数 */ VertexType vexs[MAXV]; /* 寄存极点信息 */ }MGraph; 2、暂时数组的寄存的数据种类 struct { int closest; // U 集中的极点序号 int lowcost; // 边的权值 } closedge[MAXV]; int const INF=32767; /*INF 表示∞ */ 3、prime 算法实现:(原理见实验说明) void prime(MGraph g, int v) { int lowcost[MAXV]; int min; int closest[MAXV]; int i,j,k; for (i=0;ig.vexnum;i++) 出色文档 适用标准文案 { lowcost[i]=g.edges[v][i]; closest[i]=v; } for (i=1;ig.vexnum;i++) { min=INF; for (j=0;jg.vexnum;j++) if (lowcost[j]!=0lowcost[j]min) { min=lowcost[j]; k=j; } printf( 边 (%d,%d)权为 :%d\n ,closest[k],k,min); lowcost[k]=0; for (j=0;jg.vexnum;j++) if (g.edges[k][j]!=0g.edges[k][j]lowcost[j]) { lowcost[j]=g.edges[k][j]; closest[j]=k; } } } 4、毗邻矩阵的创立 void CreatMGraph(MGraph M) { int n,e; cout 输入定点数 : ; cinn; M.vexnum=n; cout 输入弧数 : ; cine; M.arcnum=e; for ( int i=0;in;i++) { for ( int j=0;jn;j++) { if (i==j) M.edges[i][j]=0; else M.edges[i][j]=INF; } } cout 输入边的权:(如 1 2 3 表示点到点的权时) endl; 出色文档 适用标准文案 for ( int i=0;i2*e;i++) { int x,y,z; cinxyz; M.edges[x][y]=z; } cout 输入点编号,名字: endl; for ( int i=0;in;i++) { int No; string str; cinNostr; M.vexs[i].name=str; M.vexs[i].no=No; } } int const MAXV=16 4、主函数 int main( void ) { MGraph m; CreatMGraph(m); cout 输出无向图的二维矩阵: endl; for ( int i=0;im.vexnum;i++) { for ( int j=0;jm.vexnum;j++) { if (m.edges[i][j]==INF) cout ; else coutm.edges[i][j] ; } coutendl; } cout 输入

文档评论(0)

151****0456 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档