地铁建设问题C语言
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件学院
课程设计报告书
课程名称数据结构
设计题目地铁建设问题
专业班级软件13-9班
学号 1320010904 姓名 XXXXXX 指导教师 XXXXXX
2015年01 月
目录
1 设计时间 (1)
2 设计目的 (1)
3 设计任务 (1)
4 设计内容 (1)
4.1需求分析 (1)
4.2总体设计 (1)
4.2.1本程序中用到的所有抽象数据类型的定义 (1)
4.2.2主程序的流程 (2)
4.2.3各模块之间的层次调用关系 (3)
4.3详细设计 (4)
4.3.1数据类型的定义 (4)
4.3.2主要函数及其伪码 (4)
4.3.3函数的调用关系图 (7)
4.4测试与分析 (7)
4.4.1测试 (7)
4.4.2分析 (9)
4.5 附录 (9)
5 总结与展望 (15)
1 设计时间
2015年1月18日到2015年1月22日
2 设计目的
通过课程设计,加深对《数据结构》这一课程所学内容的进一步理解与巩固,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。提高程序开发功能,能运用合理的控制流程编写清晰高效的程序。训练C程序调试能力,能将一个中小型各级组织系统联调通过。开发一个中小型系统,掌握系统研发全过程。培养分析问题、解决实际问题的能力。
3设计任务
某城市要在各个辖区之间修建地铁,由于地铁建设费用昂贵,因此需要合理安排地铁建设线路,使市民可以沿地铁到达各个辖区,并使总费用最小。
4 设计内容
4.1需求分析
设计思路:
(1)先输入辖区的个数,然后输入各个辖区名称,再输入边的条数,最后输入各辖区间直接距离(地铁铺设费用与距离成正比)。
(2)根据辖区距离信息,计算出应该在哪些辖区建立地铁线路。
(3)输出应该建设的地铁线路及所需建设总里程。
4.2总体设计
4.2.1本程序中用到的所有抽象数据类型的定义:
typedef struct AA
{
int number;
int weight;
struct AA *next;
}Node;//邻接表的结点
typedef struct
{
char name[30];
Node *next;
}Graph;//邻接表的表头结点
typedef struct
{
int begin;
int end;
int weight;
}min_tree;//存储树的三元组4.2.2主程序的流程
图1 主程序的流程
4.2.3各模块之间的层次调用关系。
图2 各模块之间的层次调用关系
4.3详细设计
4.3.1数据类型的定义
typedef struct AA
{
int number;
int weight;
struct AA *next;
}Node;//邻接表的结点
typedef struct
{
char name[30];
Node *next;
}Graph;//邻接表的表头结点
typedef struct
{
int begin;
int end;
int weight;
}min_tree;//存储树的三元组
4.3.2主要函数及其伪码
int seek_i(Graph metro[],int length,char str[])
{
int i;
for(i=1;i<=length;i++)
if(strcmp(str,metro[i].name)==0)
break;
if(i>length)
return 0;
else
return i;
}
void plim(Graph metro[],int length,int ver,min_tree min_t[])//普利姆算法
{
/*前置条件:metro为图的邻接表,length为其长度,ver为要开始的序号,min_t 为三元组的空表。
后置条件:min_t储存最小生成树的三元组。*/
struct BB
{
int vertex;//结点的序号
int short_distance;//从short_distance为0的顶点到不为0的顶点的最短距离}*assist=(struct BB *)malloc((length+1)*sizeof(struct BB));//辅助数组
/*---------初始化辅助数组----------*/
for(i=0;i<=length;i++)
{
assist[i].short_distance=WEIGHT_MAX;
assist[i].vertex=0;
}
/*----------加入ver的结点------------*/
assist[ver].short_distance=0;
p=metro[ver].next;
while(p)
{
assist[p->number].short_distance=p->weight;