- 1、本文档共25页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
北京理工大学数据结构课程设计专题报告(图)公交线路查询
专题设计(图)报告
题目:公交线路查询
小组成员:
问题描述
当一个用户从甲地到乙地时,由于不同需求,就有不同的交通方式及不同的交通路线。有人希望以最快速度到达,有人希望以最短距离到达,有人希望用最少的费用等。交通方式有公交车和地铁。编写一北京公交线路查询系统,通过输入起始站、终点站,为用户提供三种或以上决策的交通咨询。
设计要求
a. 提供对交通线路进行编辑功能。要求可添加或删除线路。
b. 提供两种交通工具,公交车和地铁,设定路程所需要的时间、距离及费用等参数。
c. 提供多种决策:最短距离、最快到达、最少费用、最少换乘次数等。
d. 中途不考虑等候、拥堵等消耗时间。
e. 该系统以人机对话方式进行。用户输入起始站、终点站及需求原则,系统输出乘车方案:乘什么车、乘几路车、距离、时间、费用换乘方法等相关信息。
数据结构
本程序运用了关于图这种数据结构。
它的抽象数据类型定义如下:
typedef struct unDiGraph
{
int numVerts; //结点
costAdj cost; //邻接矩阵
}unDiGraph,*UNG;
基本操作:
unDiGraph* CreateCostG()
操作结果:构造带权(费用)图。
unDiGraph* CreateTimeG()
操作结果:构造带权(时间)图。
构造地铁带权(费用)图。
PathMat *Floyed(unDiGraph *D)
操作结果:Floyed函数 求任意两点的最短路径。
设计与实现
算法思路
(1) 数据存储。站点信息(站点代码)、交通信息(站点间的里程、公交和地铁时刻)存储于磁盘文件。建议把站点信息存于文件前面,交通信息存于文件的后面,用fread和fwrite函数操作。
(2) 数据的逻辑结构。根据设计任务的描述,其站点间的交通问题是典型的图结构,可看作为有向图,图的顶点是站点,边是站点之间所耗费的时间(要包括中转站的等候时间)或车费。
(3) 数据的存储结构。采用邻接表和邻接矩阵都可作为数据的存储结构,但当邻接边不多时,宜采用邻接表,以提高空间的存储效率。这里建议采用邻接表作为数据的存储结构。
(4) 用不同的功能模块对站点信息和交通信息进行编辑。添加、修改、删除功能可用菜单方式或命令提示方式。只要能方便的对站点信息和交通信息进行管理即可。
(5) 最优决策功能模块(fast or province)。
① 读入信息和交通信息,用邻接表生成含权网络,表头数组中的元素存放站点名及对方站点到达该元素所代表站点的所有信息;表头数组中的元素所对应的单链表存放与该元素所代表的站点有交通联系的站点(代码、里程、公交和地铁车次)。
② 根据具体最优决策的要求,用Dijkstra算法求出出发站点到其它各站点的最优值(最短时间或最小的费用),搜索过程中所经过站点的局部最优信息都保存在邻接表的表头数组中。其目的站点所代表的元素中就保存了所需的最优决策结果。这过程中,要用队列或栈保存局部最优决策值(局部最短的时间或最省的费用)变小的站点,其相应的初始值可为∞,并在表头数组对应的站点元素中保存响应的信息。开始时,栈(队)中只有出发站点,随着对栈(队)顶(首)站点有交通联系的站点求得决策值(最短时间或最小的费用),若该值是局部最优值且该站点不在栈(队)中,则进栈(队),直至栈(队)为空。
③ 输出结果。从目的站点出发,搜索到出发站点,所经过的站点均入栈,再逐一出栈栈中的站点,输出保存在表头数组中对应站点的信息(对方站点的出发信息,里程、时间、费用等)及最终结果。即输出依次于何时何地乘坐几点的公交或地铁于何时到达何地;最终所需的最快需要多长时间才能到达及费用,或者最少需要多少车费才能到达及时间。
(6) 主程序可以有系统界面、菜单;也可用命令提示方式;选择功能模块执行,要求在程序运行过程中可以反复操作。
算法思想
本程序运用了图的知识
里程 时间 A-B 8 8 B-C 5 5 C-K 6 7 K-L 1 1 L-J 6 7 J-M 6 6 C-D 5 5 D-M 5 5 D-E 4 4 E-M 11 11 E-H 6 6 E-F 9 9 F-A 9 9 F-G 6 6 G-I 2 2 E-H 6 6
并利用Floyed函数求带权图两点之间的最短路径。通过对图表求最短路径,就可以最短道从一站点到另一站点之间最省时间和最省费用的走法。
程序模块
程序的模块为
#include windows.h
#include stdio.h
#include crtdbg.h
#include string.h
#includeiostream.h
#include malloc.h//引用的文本件
#de
文档评论(0)