数据结构课程设计地铁建设问题.docx
- 文档编号:30202909
- 上传时间:2023-08-07
- 格式:DOCX
- 页数:19
- 大小:39.47KB
数据结构课程设计地铁建设问题.docx
《数据结构课程设计地铁建设问题.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计地铁建设问题.docx(19页珍藏版)》请在冰豆网上搜索。
数据结构课程设计地铁建设问题
软件学院
课程设计报告书
课程名称数据结构课程设计
设计题目地铁建设问题
专业班级
学号
姓名
指导教师
2013年1月
1设计时间
2013年1月16日至2013年1月21日
2设计目的
数据结构是计算机专业的核心课程,是计算机科学的算法理论基础和软件设计的技术基础。
数据结构是实践性很强的课程。
课程设计是加强学生实践能力的一个强有力手段。
要求学生掌握数据结构的应用、算法的编写、类C语言的算法转换成C程序并上机调试的基本方法。
课程设计要求学生在完成程序设计的同时能够写出比较规范的设计报告。
严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用。
3设计任务
某城市要在各个辖区之间修建地铁,由于地铁建设费用昂贵,因此需要合理安排地铁建设线路,使市民可以沿地铁到达各个辖区,并使总费用最小。
1.输入各个辖区名称和各辖区间直接距离(地铁铺设费用与距离成正比);
2.根据辖区距离信息,计算出应该在哪些辖区建立地铁线路;
3.输出应该建设的地铁线路及所需建设总里程。
4设计内容
4.1需求分析
1、程序所能达到的功能:
(1)根据输入的辖区信息,建立图模型,使用的数据结构是无向图,采用邻接矩阵存储。
(2)根据普利姆算法计算最小生成树。
(3)输入各个辖区代号,名称和各辖区间直接距离(地铁铺设费用与距离成正比)。
(4)根据辖区距离信息,计算出应该在哪些辖区建立地铁线路。
(5)输出应该建设的地铁线路及所需建设总里程。
2、输入的形式及内容:
包括城市名称、城市间距离权值、起始地点,详见4.4.1测试部分。
3、输出的形式及内容:
包括生成的邻接表、应建设铁路的辖区名称及权值、最终地铁的总里程,详见4.4.1测试部分。
4、测试数据:
四个城市abcd及其之间的距离权值,详见4.4.1测试部分。
4.2总体设计
4.2.1数据类型的定义
1.图的邻接矩阵存储数据类型定义:
typedefstruct{
charV[M][10];
intR[M][M];
intvexnum;Graph;)
2.辅助数组数据类型定义:
typedefstruct{
intadjvex;
intlowcost;}
closedge[MAX];
4.2.2基本操作:
CreateCity(&G)
操作结果:
构造一个无向图G;
LocateDistri(Graphg,intu)
操作结果:
找出目标城市的位置;
Min(Graphg,closedgeclosedge)
操作结果:
求出点与点之间的最短路径;
Prim(G,G.distrinam[1])
操作结果:
用普里姆算法找到连接各辖区的最短路;
4.2.3主程序的流程
主程序的流程如图1所示:
图1
4.2.4各程序模块之间的层次(调用)关系
各程序模块之间的层次(调用)关系如图2所示:
图2
4.3详细设计
4.3.1预处理
#include
#include
#include
#include
#defineINFINITY10000
#defineM20
typedefstruct{//创建图的结构体
charV[M][10];//顶点数组,用来存储辖区的值即辖区的名称
intR[M][M];//邻接矩阵,邻接矩阵的元素值为辖区之间的距离
intvexnum;//辖区的个数
}Graph;
structtree{
intweizhi;
intlowcost;
};
4.3.2创建辖区无向图的算法
intcreatgraph(Graph*g)//创建辖区无向图,图中含有n个结点,创建辖区邻接矩阵
{
inti=0,j,m,k,p;
chara[10],b[10];
printf("*****欢迎使用本程序解决地铁建设问题*****\n");
printf("*******请按照提示依次输入相关信息*******\n");
printf("***请输入所有的辖区,以0作为结束标志****\n");
scanf("%s",g->V[i]);//输入结点值
while(strcmp("0",g->V[i])!
=0)
{
i++;
scanf("%s",g->V[i]);
}
g->vexnum=i;
for(i=0;i
for(j=0;j
g->R[i][j]=INFINITY;//初始化
printf("*请输入辖区之间的路程,以000为结束标志*\n");
scanf("%s%s%d",a,b,&m);//输入辖区结点及辖区之间的距离
while(strcmp("0",a)!
=0||strcmp("0",b)!
=0||m!
=0)
{
k=locatevex(g,a);p=locatevex(g,b);//查找a,b在图中的位置
if(k==-1)
{
printf("*****对不起,输入错误,没有%s这个辖区*****\n",a);
return0;
}
if(p==-1)
{
printf("*****对不起,输入错误,没有%s这个辖区*****\n",b);
return0;
}
g->R[k][p]=g->R[p][k]=m;//k到p和p到k之间的距离相同
scanf("%s%s%d",a,b,&m);//输入辖区结点及辖区之间的距离
}
return1;
}
structtree{
intweizhi;
intlowcost;
};
intminimun(structtree*a,Graphg)//求出第k辖区,此时i辖区与k辖区之间的距离最短
{
inti,k,m=0;
for(i=0;i { if(m==0&&a[i].lowcost! =0) { m=1; k=i; } if(m==1&&a[i].lowcost! =0) { if(a[i].lowcost k=i; } } returnk; } 4.3.3定位函数 intlocatevex(Graph*g,chara[10])//查找辖区u在辖区图中的位置 { inti; for(i=0;i { if(strcmp(a,g->V[i])==0) returni; } if(i==g->vexnum) return-1; } 4.3.4求最小生成树的结点算法 intminimun(structtree*a,Graphg)//求出第k辖区,此时i辖区与k辖区之间的距离最短 { inti,k,m=0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 地铁 建设 问题