数据结构第二次试验.地铁换乘.docx

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

数据结构实验报告

(二)

学院自动化学院学号姓名徐璐峰

日期2017-12-18

实验目的

熟练掌握图的存储方式;

了解图的特性,学习在实际问题背景下灵活运用图;

掌握图的两种最短路径算法。

实验内容

为简化问题,假设南京现有三条地铁线:1号线、2号线和3号线,线路都是双向的。3条地铁线的站点名分别如下,地铁线交叉的换乘点用T1、T2等表示。请根据3条地铁线的站点和换乘点构造图。编写程序,任意输入两个站名名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次)。

地铁1号线(直线)经过车站:A1A2A3T1A4A5A6A7A8T2A9A10A11A12T3A13A14A15T4A16

地铁2号线(直线)经过车站:B1T5B2B3B4B5T2B6B7B8B9B10B11T3B12B13T6B14B15

地铁3号线(环线)经过车站:C1C2C3C4C5T1C6C7C8C9C10T5C11C12C13T6C14C15T4C16C17C18

实验要求

用户从键盘输入两个不同的站名,程序输出最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次);

分别基于迪杰斯特拉算法和弗洛里德算法实现上述地铁换乘问题;

程序功能模块的划分要适当,多使用流程图来描述算法结构。

需求分析

输入的形式和输入值的范围。输入的形式需要是地铁站的名称,如“A1”、“B7”、

“C14”。所输入的的站点名不能是所要求的站点名之外的名称。

输出的形式。所输出的是基于弗洛里德算法与迪杰斯特拉算法进行的最短路径长度求解的结果,以及最短路径的车站路径编号,并在输入错误的时候允许重复输入。

程序所能达到的功能。用户输入车站起点与车站终点之后,通过迪杰斯特拉算法与

弗洛伊德算法,输出从起点到终点的最短路径长度,以及最短路径所经过的车站编号。

测试数据。

在程序运行的开始,会提示用户输入起点与终点,在用户输入起点与终点之后,程序会输出根据弗洛伊德算法所得到的最短路径所经过的车站数量,及经过的车站路径的编号。之后会再输出根据迪杰斯特拉算法所得的最短路径所经过的车站数量,及所经过的车站路径的编号。如果所输入起点或终点不存在,则会提示“起点/终点输入错误,请确认后重新输入。”之后会继续出现“请输入起点/终点:”之后,用户就可以重新输入原来输入错误的起点或终点车站名。在确认起点与终点都输入正确之后,程序就会输出最短路径与路径编号。在一次程序执行完毕后,支持用户重复输入。

概要设计

在程序中之定义了一种抽象数据类型,structGraph,它包含三个元素,intarrAcc[56][56];//邻接矩阵intverCount;//点数intarcCount;//边数。并且在程序开始的时候,还定义了长度为56的string型数组,用于存储所有的地铁站点。在程序运行开始的时候,会先调用change_train函数,在change_train函数中,会先对g.arrAcc[56][56]邻接矩阵进行初始化。之后调用floyd函数,及printres函数,输出起点到终点的最短路径长度及路径车站编号。之后,会继续调用Dijkstra函数及searchPath函数,输出起点到终点的最短路径长度及路径车站编号。

详细设计

类视图

整个程序中所写的函数有:floyd函数,transform函数,printres函数,Dijkstra函数,

searchPath函数,change_train函数。

Floyd函数(图g,邻接矩阵dis[][],用来存储路径的矩阵path[][])

{

//初始化path矩阵

For(row0to总的站点数)

For(col0to总的站点数)path[row][col]←row;

For(k0to总的站点数)For(i0to总的站点数)

For(j0to总的站点数)

{

//存在更近的路径,更新

If(dis[i][j]dis[i][k]+dis[k][j]){

dis[i][j]←dis[i][k]+dis[k][j];path[i][j]←path[k][j];

}

}

}

Transform函数(字符c)

{

For(i0to站点数)

If(存储所有站点的数组s[i]==c)

返回i;

}

Printres函数(图Graph*p,经floyd函数转化后的邻接矩阵dis[56][56],存储路径的矩阵

pat

文档评论(0)

159****1944 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档