数据结构课程设计:地铁
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计:地铁建设问软件学院
课程设计报告书
课程名称_______________ 数据结构 _______________ 设计题目___________ 地铁建设问题 ______________ 专业班级__________________________
学号__________________________
姓名_________________________________ 指导教师
2014年1月17日
目录
1设计时间 0
2设计目的 0
3设计任务 0
4设计内容 0
4.1总体设计 0
4.2需求分析 (1)
4.3详细设计 (1)
4.4测试与分析 (3)
4.4.1测试 (3)
4.4.2分析 (4)
4.5 附录 (4)
5总结与展望 (8)
参考文献 (9)
成绩评定 (11)
1设计时间
2014年1月15日
2设计目的
设计各辖区之间最短地铁,使修建费用最少
3设计任务
某城市要在各个辖区之间修建地铁, 由于地铁建设费用昂贵, 建设线路,使市民可以沿地铁到达各个辖区,并使总费用最小。
4设计内容
(1) 输入各个辖区名称和各辖区间直接距离(地铁铺设费用与距离成正比) (2) 根据辖区距离信息,计算出应该在哪些辖区建立地铁线路。
(3)
输出应该建设的地铁线路及所需建设总里程。
4.1总体设计
睡立无向囹•咯閃曹巨阵存
因此需要合理安排地铁
输入担真.纯恵 痒口宜仙巨离
图4-1算法图
4.2需求分析
(1) 本程序设计计算城市内各辖区间修建地铁的最短路程。
(2) 运行时,输入辖区的名称,各辖区之间用空格键隔开,以 (3) 输入各辖区间距离时,先输入两辖区名称,再输入距离。
(4)
最后计算最短距离来得出最少费用。
采用邻接矩阵存储构造无向图
int creatgraph(Graph *g)
char a[10],b[10];
printf("请输入所有的辖区,以#为输入结束标志\n");
while (strcmp("#" ,g->V[i])!=0)
i++;
scanf("%s" ,g->V[i]); }
g->vex num=i;
#输入结束
4.3 详细设计
int i=O,j,m,k,p;
for (i=O;i<g->vex nu m;i++)
for (j=0;j<g->vex nu m;j++) g->R[i][j]=INFINITY; printf("请输入辖区和辖区之间的路程,
scan f("%s%s%d" ,a,b,&m);
while (strcmp( "##" ,a)!=0 || strcmp( "##" { k=locatevex(g,a); p=locatevex(g,b);
if(k==-1)
{
printf("没有%s这个辖区\n" ,a);
return 0;
}
if(p==-1)
{
printf("没有%s这个辖区\n" ,b);
return 0;
}
g->R[k][p]=g->R[p][k]=m;
scanf("%s%s%d" ,a,b,&m);
}
return 1;
}
普利姆算法生成最小树
struct tree //构造最小生成树// {
int weizhi;
int lowcost;
}; 丄##为结束标志\n"); ,b)!=0 || m!=0)
int minimun( struct tree *a,Graph g) {
int i,k,m=O;
for (i=O;i<g.vex nu m;i++)
f (m==0 && a[i].lowcost!=0)
m=1;
k=i;
if (m==1 && a[i].lowcost!=0)
if (a[i].lowcost<a[k].lowcost)
k=i;
ret u rn k;
4.4 测试与分析
4.4.
测试
1
图4-1正确测试结果
图4-2错误测试结果
4.4.2分析
调试时,在输入数据时,再输完数据后要再次按下空格键,再输入结束符号才会结束本次输入进入下一个输入。
且不能输入与本次输入无关的数据或者超出本次输入限制的数据,否则显示错误
重新输入。
4.5 附录
#i nclude vstdio . h>
#i nclude vstdlib .h>
#i nclude vmalloc .h>
#i nclude <stri ng .h>
#defi ne INFINITY 10000
#defi ne M 20
typedef struct{
char V[M][10];
in R[M][M】;
seanf( "%s%s%c|a,b, &m);
}
return 1;
}
struct tree //构造最小生成树II {
int weizhi;
int lowcost;
};
int minimun(struct tree *a,Graph g)
{
int i,k,m =0;
for (i =0;i <g. vexnum;i ++)
{
if (m==0 &&a[i] . lowcost != 0)
{
m =1;
k =i;
}
if (m==1 &&a[i] . lowcost != 0)
{
if (a[i] . lowcost <a[k] . lowcost)
k =i;
}
}
return k;
}
void MiniSpanTree_PRIM(Graph g, char a[10])
{ _
struct tree closedge[M];
int i,j,k,money =0;
k =locatevex( &g,a);
if (k==-1)
{
printf("没有%S这个辖区,无法求解\n" ,a);
return 0;
}
for (i =0;i <g. vexnum;i ++)
{
if (i !=k)
{
closedge[i] . lowcost =g. R[k][i];
closedge[i] . weizhi =k;
匕
}
closedge[k] .lowcost =0;
for (i =1;i <g. vexnum;i ++)
{
k =minimun( closedge,g);
money +=closedge[k] . lowcost;
printf( "%d:%s %s
%d\n",i,g . V[ closedge[k] . weizhi ],g
. V[k],closedge[k] closedge[k] . lowcost =0;
for (j =0;j <g. vexnum;j ++)
{
if (g . R[k][j] <closedge[j] . lowcost)
{
closedge[j]
. weizhi =k; closedge[j]
. lowcost =g. R[k][j]; }
}
}
printf("总费用为:%d\n",mo ney);
} void main()
{
int i,k;
Graph g;
char a[10];
printf("请选择功能:1 (铁路建设)0 (退出)\n"); scanf( "%d", &k);
while (k)
{
i =creatgraph( &g);
if (i)
{
printf( "请输入从哪里开始:");
scanf( "%s",a);
Mi niSpa nTree_PRIM(g,a);
}
printf("请选择功能:1 (铁路建设)0 (退出)\n" scanf( "%d", &k);
}
} 5总结与展望
本程序,本次编译涉及数据结构最小生成树以及图的构造等编
译。
先要构造结构体, 在定义时应要注意尽量将赋值空间增大,以防止调试时输入数据超出运算范围。
再进行函
数的编译调用,构造无向图用邻接矩阵进行存储,这些编译代码,书上都有介绍,但不可 尽抄,书上的只是一个模板,根据程序设计任务将变量进行修改,构造图之后,运用最小 生成树原理,用普.lowcost);
);
利姆算法对整个程序变量进行编译,最后进入主函数,就直接调用函数进行运算输入的数据,输出运算结果。
这次程序的编译让我对图的遍历理解的更加深入,最小生成树问题不仅可以运算本次
程序对地铁建造最少费用问题,更可以运用于一系列的最短距离等问题,解决甚多复题!极
杂问其具有实用性!
[1]
版,
[2]
等专科学校学报,2003,10(4): 100〜130.
[3] 严蔚敏.吴伟民编著,数据结构。
一北京:清华大 学参考文献 屈辉立,陈可明石武信JSP 网站编程教程[M].第1 北京:北京希望电子出版社,2005 白勇.用B/S 模式构建在线考试系统[J],重庆电力
出版社,2007
[4]姚诗斌.数据库系统基础。
计算机工程与应用,1981 年第8期
成绩评定
成绩教师签字。