地铁建设问题C语言

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档