构造这个城n个小区之间的电网使总工程造价最低请.ppt
上传人:天马****23 上传时间:2024-09-11 格式:PPT 页数:17 大小:1.9MB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

构造这个城n个小区之间的电网使总工程造价最低请.ppt

构造这个城n个小区之间的电网使总工程造价最低请.ppt

预览

免费试读已结束,剩余 7 页请下载文档后查看

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

每个小区都有一条电网线n个小区之间最多可以有n(n-1)/2条线路,选择其中的n-1条使总的耗费最少其中网的顶点表示小区,边表示两个小区之间的线路,赋予边的权值表示相应的代价电网转换为生成树,选择总耗费最少的生成树,就是构造连通网的最小代价生成树的问题设计思路算法设计函数部分模块intLocateVex(intv){intk;for(k=0;k<G.vexnum;k++)if(G.vexs[k]==v)returnk;//没有这个顶点return-1;}intCreate_UDN(){inti,j,k,weight;intv1,v2;printf("输入无向图的顶点数和弧数:");scanf("%d%d",&G.vexnum,&G.arcnum);for(i=0;i<G.vexnum;++i)for(j=0;j<G.vexnum;++j)G.arcs[i][j].adj=9999999;printf("输出网的%d个顶点(限数字):",G.vexnum);for(i=0;i<G.vexnum;i++)voidPrintMatrix(MGraph&G){inti,j;printf("邻接矩阵为:\n");for(i=0;i<G.vexnum;i++){for(j=0;j<G.vexnum;j++){if(G.arcs[i][j].adj!=9999999)printf("%d",G.arcs[i][j].adj);elseprintf("∞");}printf("\n");}}假设N=(V,{E})是一个含有n个顶点的连通网,TE是N上最小生成树中边的集合,算法从U={u0},TE={}开始(U是指顶点集V的一个非空子集),重复执行下述操作:在所有u属于U,v属于V-U的边(u,v)属于E中找到一条代价最小的边(u0,v0)并入集合TE,同时u0并入U,直至U=V为止。此时TE中必有n-1条边,则T=(V,{TE})为N的最小生成树。for(i=0;i<G.vexnum;i++){if(!s[i]&&d[i]>G.arcs[k][i])//!=s[i],在下次寻找时不必再考虑已经选取的点{d[i]=G.arcs[k][i];f[i]=k;}if(min>d[i]&&!s[i]){min=d[i];next=i;ct[t].first=G.vexs[f[i]];ct[t].end=G.vexs[i];ct[t].w=d[i];}}k=next;//将k置为下一个点起始点}for(i=0;i<G.vexnum-1;i++)printf("%d,%d,%d\n",ct[i].first,ct[i].end,ct[i].w);}以下图为例操作界面所以最后得到的最小造价为1+4+2+5+3=15操作步骤的说明输入:输入顶点个数,边的条数:6,10输入第1条边的起点,终点,权值:1,2,6输入第2条边的起点,终点,权值:1,3,1输入第3条边的起点,终点,权值:1,4,6输入第4条边的起点,终点,权值:2,3,5输入第5条边的起点,终点,权值:2,5,3输入第6条边的起点,终点,权值:3,4,5输入第7条边的起点,终点,权值:3,5,6输入第8条边的起点,终点,权值:3,6,4输入第9条边的起点,终点,权值:4,6,2输入第10条边的起点,终点,权值:5,6,6最后构成的最小生成树是:(1,3)1(3,6)4(6,4)2(3,2)5(2,5)3图邻接矩阵我们课程设计的主要就是最小生成树普利姆算法的实现,在这次实践中遇到了各种问题,碰到问题有时总是百思不得其解在最开始,分析题目时知道本题就是书上最小生成树的问题,于是将书上内容复习一遍。在程序完成后也出现过多次问题,比如printf后面的中文提示多次错误,另外最后的输出结果也出现问题,输出的点与实际相差1,最后修改程序的普里姆算法段完成。除此之外,通过本次课程设计巩固了课本的基本知识,熟练运用课程知识。提高我们组织数据及编写程序的能力,使我们能够根据问题要求和数据对象的特性,学会数据组织的方法,把现实世界中的问题在计算机内部表示出来并用软件解决问题,本次实验大大提高了我们对编程的爱好。