实习三 求无向连通图的生成树.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实习三 求无向连通图的生成树

实习三 求无向连通图的生成树 需求分析 问题描述: 若要在n个城市之间建设通信网络,只需要架设n-1条路线即可。如何 以最低的经济代价建设这个通信网,是一个网的最小生成树问题。 基本要求: (1)利用克鲁斯卡尔算法求网的最小生成树,其中,以课本8.7节中的等 价类表示构造生成树过程中的连通分量。 (2)利用普里姆算法求网的最小生成树。 (3)以文本文件形式输出生成树中各条边以及他们的权值。 设计 (1)设计思想:创建邻接矩阵存储结构。本程序主要分为两个模块:创建邻接矩阵模块,最小生成树模块。创建邻接矩阵模块:以邻接矩阵的存储形式创建无向网。最小生成树模块:生成最小生成树,输出其各条边及权值。 (2)概要设计:int型 LocateVex函数判断权值在矩阵的位置;声明CraeteGraph函数创建邻接矩阵;声明kruskal函数用于生成最小生成树;声明main函数为程序调用步骤。 (3)设计详细:a.将程序分为两个模块: B.主函数流程图: c.最小生成树流程图 (4)调试分析:--变量没定义就使用 解决:定义完变量在使用。 --子函数嵌套定义; 解决:子函数单独定义,可调用。 --使用数组是越界; 解决:注意数组的值,注意不能越界。 用户手册:a.主页面: b.输入顶点数及边数的信息: c.输入顶点信息: d.输入顶点及权值: (6)测试结果:输出最小生成树及权值: (7)源程序: #includestdio.h #includestdlib.h #includestring.h #define MAX 100 #define MAX_VERTEXNUM 20 typedef char Vertex[MAX];//顶点字符串 typedef int Adjmatrix[MAX_VERTEXNUM][MAX_VERTEXNUM];//邻接矩阵 typedef struct//定义图 { Vertex vexs[MAX_VERTEXNUM]; Adjmatrix arcs; int vexnum,arcnum; }MGraph; int LocateVex(MGraph* G,Vertex u)//判断权值在矩阵的位置 { int i; for(i=0;iG-vexnum;++i) { if(strcmp(G-vexs[i],u)==0) return i; } return -1; } void CreateGraph(MGraph *G)//创建邻接矩阵 { int i,j,k,w; Vertex va,vb; printf(请输入顶点数和边数:(用空格隔开)\n); scanf(%d%d,G-vexnum,G-arcnum); printf(请输入%d个顶点的信息:(用空格隔开)\n,G-vexnum); for(i=0;iG-vexnum;++i) scanf(%s,G-vexs[i]); for(i=0;iG-vexnum;++i) for(j=0;jG-vexnum;++j) G-arcs[i][j]=MAX; printf(请输入%d条边的两个顶点及权值:(用空格隔开)\n,G-vexnum); for(k=0;kG-arcnum;++k) { scanf(%s%s%d*c,va,vb,w); i=LocateVex(G,va); j=LocateVex(G,vb); G-arcs[i][j]=G-arcs[j][i]=w; } } void kruskal(MGraph G)//最小生成树 { int set[MAX_VERTEXNUM],i,j; int k=0,a=0,b=0,min=G.arcs[a][b]; for(i=0;iG.vexnum;++i) set[i]=i; printf(最小生成树的各条边及权值为:\n); while(kG.vexnum-1) { for(i=0;iG.vexnum;++i) for(j=0;jG.vexnum;++j) if(G.arcs[i][j]min) { min=G.arcs[i][j]; a=i; b=j; } if

文档评论(0)

zilaiye + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档