数据结构最小生成树课程设计

数据结构最小生成树课程设计

ID:42624530

大小:336.07 KB

页数:21页

时间:2019-09-19

数据结构最小生成树课程设计_第1页
数据结构最小生成树课程设计_第2页
数据结构最小生成树课程设计_第3页
数据结构最小生成树课程设计_第4页
数据结构最小生成树课程设计_第5页
资源描述:

《数据结构最小生成树课程设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、目录一、课题描述:2二、需求分析3三、总体结构设计4四、各子模块设计5五、编程设计8六、测试结果12七、总结14八、参考文献15附录1621一、课题描述:设计一张城市地图,图中的顶点为城市,无向边代表两个城市间的连通关系,边上的权代表公路造价。图中任一对城市都是连通的,用公路把所有城市联系起来,设计可使得工程的总造价最少。21二、需求分析根据课设题目要求,拟将整体程序分为三大模块。此三个模块相互独立,没有嵌套调用的情况,以下是三个模块的大体分析:1.建立一个图,其存储方式可以采用邻接矩阵形式,需要定义两个数组,一个存储城市,一个存储公路,存储公路的数组表明城市间的连通关系和公路的造价;。2.利

2、用kruskal算法求城市地图的最小生成树3.按父亲结点和子女结点集的形式输出生成树中各条边(公路)以及它们的权值(造价),公路总造价最小值。21三、总体结构设计功能模块图无向图的建立最小生成树的求解按父结点和子女结点集的形式输出,求最小值,21四、各子模块设计1.无向图的建立(初始化)printf(“请输入城市的信息”)n=1G->arc[i][j].adj=G->arc[j][i].adj=0j++i++j=1j<=G->vexnumi<=G->vexnumInti,j,n,h,m,ki=1NYNYn<=G->vexnumscanf(“%s”,vex[n].name);n++NY212

3、.用kruskal算法求最小生成树sort(edges,G)i=1找公路和公路的造价j++i++j=i+1j<=G->vexnumivexnumInti,j,n,mi=1NYYNYYi<=G->vexnumparent[i]=0;i++NY213.用冒泡法排序printf(“公路造价排序为:”)i=1公路造价排序j++i++j=i+1j<=G->vexnumivexnuminti,j;i=1NYNYNi<=G->vexnumprintf(“<%s,%s>%d”,vex…);i++Y21五、编程设计存储结构该函数包含三个结构体,即存储城市、存储公路和存储图的结构体,其结构

4、体分别如下所示:1.顶点和边的存储表示用字符串name表示城市信息,num表示城市的序号。structnode{charname[10];intnum;}vex[20];用整型begin和end表示公路的起点和终点,weight表示公路的造价。typedefstruct{intbegin;intend;intweight;}edge;2.图的邻接矩阵存储表示用整型adj表示城市间的关系,weight表示公路的造价。typedefstruct{intadj;intweight;}AdjMatrix[MAX][MAX];用arc表示邻接矩阵,vexnum和arcnum表示图当前的城市数和公路数。t

5、ypedefstruct{AdjMatrixarc;intvexnum,arcnum;}MGraph;时间复杂度0(n^2)21算法描述该算法是建立一个带权的无向图,并用Kruskal算法求该图的最小生成树,用父结点和子女结点集的形式输出最小生成树。1.无向带权图的建立图的存储结构如上所示,;用adj是否为1判断两城市间是否有公路,adj为1时表示有公路,反之没有公路,vexnum和arcnum分别表示城市数和公路数,name和num分别表示城市信息和城市序号,建图的算法如下所示:voidCreatGraph(MGraph*G){inti,j,n,h,m,k;charu[MAX],v[MAX]

6、;printf("请输入公路数和城市数:");scanf("%d%d",&G->arcnum,&G->vexnum)for(i=1;i<=G->vexnum;i++)//初始化图{for(j=1;j<=G->vexnum;j++){G->arc[i][j].adj=G->arc[j][i].adj=0;}}printf("请输入城市的信息:");for(n=1;n<=G->vexnum;n++){scanf("%s",vex[n].name);vex[n].num=n;}for(i=1;i<=G->arcnum;i++){printf("请输入有公路的2个城市:");scanf("%s

7、",v);scanf("%s",u);for(k=1;k<=G->vexnum;k++){if(strcmp(v,vex[k].name)==0){m=vex[k].num;}if(strcmp(u,vex[k].name)==0){h=vex[k].num;}}G->arc[m][h].adj=G->arc[h][m].adj=1;getchar();printf("请输入%s与%s之间的公

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。