1、图4-1算法图4.2需求分析(1)本程序设计计算城市内各辖区间修建地铁的最短路程。(2)运行时,输入辖区的名称,各辖区之间用空格键隔开,以输入结束。(3)输入各辖区间距离时,先输入两辖区名称,再输入距离。(4)最后计算最短距离来得出最少费用。3详细设计采用邻接矩阵存储构造无向图int creatgraph(Graph g) int i=0,j,m,k,p; char a10,b10; printf(请输入所有的辖区,以为输入结束标志n); scanf(%s,gVi); while(strcmp(”,gVi)!=0) i+; scanf(”s,g-Vi); gvexnum=i; for(i=0;
2、ig-vexnum;i+) for(j=0;jRij=INFINITY;请输入辖区和辖区之间的路程,以#为结束标志n”); scanf(”s%sd,a,b,m); while(strcmp(”,a)!=0 | strcmp(#,b)!=0 m! k=locatevex(g,a); p=locatevex(g,b); if(k=1) printf(”没有s这个辖区n,a); return 0; if(p=1)没有s这个辖区n,b); gRkp=gRpk=m; scanf(”%s%sd”,a,b,m); return 1;普利姆算法生成最小树struct tree /构造最小生成树/ int we
3、izhi; int lowcost; ;int minimun(struct tree a,Graph g) int i,k,m=0;ig.vexnum; if(m=0 & ai.lowcost! m=1; k=i; if(m=1 & ai.lowcost! if(ai。lowcostak。lowcost) k=i; return k;4.4测试与分析4.4.1测试图4-1正确测试结果图42错误测试结果4.4.2分析调试时,在输入数据时,再输完数据后要再次按下空格键,再输入结束符号才会结束本次输入进入下一个输入.且不能输入与本次输入无关的数据或者超出本次输入限制的数据,否则显示错误,将重新输入
4、.5 附录include include stdlib.h include malloc.hstring.hdefine INFINITY 10000#define M 20 typedef struct char VM10; int RMM; int vexnum;Graph;int locatevex(Graph g,char a10) int i; for(i=0;ig-vexnum; if(strcmp(a,gVi)=0) return i; if(i=gvexnum) return 1;int creatgraph(Graph *g) int i=0,j,m,k,p; char a1
5、0,b10; printf(”请输入所有的辖区,以#为输入结束标志n”); scanf(”s”,gVi); while(strcmp(”#”,gVi)! i+;,gVi); g-vexnum=i;g- for(j=0;gvexnum; gRij=INFINITY;请输入辖区和辖区之间的路程,以#为结束标志n); scanf(”%s%sd,a,b,&m);#”,a)!=0 | strcmp(”#”,b)! p=locatevex(g,b);没有%s这个辖区n”,a); if(p=-1) printf(”没有%s这个辖区n,b); return 0; gRkp=g-Rpk=m;ss%d,a,b,&
6、 return 1; int lowcost; ; int i,k,m=0;ig。 ai。lowcost! if(m=1 ai。 if(ai。 k=i;void MiniSpanTree_PRIM(Graph g,char a10) struct tree closedgeM; int i,j,k,money=0; k=locatevex(g,a); if(k=-1) printf(”没有%s这个辖区,无法求解n”,a);g。 if(i!=k) closedgei.lowcost=g.Rki; closedgei。weizhi=k; closedgek.lowcost=0; for(i=1;g
7、.vexnum; k=minimun(closedge,g); money+=closedgek。lowcost;%d:%s s %dn”,i,g.V closedgek.weizhi ,g.Vk,closedgek.lowcost); closedgek。lowcost=0;jg。j+) if(g.Rkjclosedgej.lowcost) closedgej.weizhi=k; closedgej.lowcost=g.Rkj; printf(”总费用为:%dn”,money);void main() int i,k; Graph g; char a10;请选择功能: 1(铁路建设) 0(退
8、出)nd”,k); while(k) i=creatgraph(g); if(i) printf(”请输入从哪里开始:,a); MiniSpanTree_PRIM(g,a); 1(铁路建设) 0(退出)n”); scanf(”%d,&k);5 总结与展望本程序,本次编译涉及数据结构最小生成树以及图的构造等编译。先要构造结构体,在定义时应要注意尽量将赋值空间增大,以防止调试时输入数据超出运算范围.再进行函数的编译调用,构造无向图用邻接矩阵进行存储,这些编译代码,书上都有介绍,但不可尽抄,书上的只是一个模板,根据程序设计任务将变量进行修改,构造图之后,运用最小生成树原理,用普利姆算法对整个程序变量
9、进行编译,最后进入主函数,就直接调用函数进行运算输入的数据,输出运算结果。这次程序的编译让我对图的遍历理解的更加深入,最小生成树问题不仅可以运算本次程序对地铁建造最少费用问题,更可以运用于一系列的最短距离等问题,解决甚多复杂问题!极其具有实用性!参考文献1 屈辉立,陈可明,石武信.JSP网站编程教程M.第1版, 北京:北京希望电子出版社,2005 2 白勇。用B/S模式构建在线考试系统J,重庆电力高等专科学校学报,2003,10(4): 100130. 3 严蔚敏.吴伟民编著,数据结构.-北京:清华大学出版社,20074 姚诗斌。数据库系统基础。计算机工程与应用,1981年第8期成绩评定成绩 教师签字
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1