山大公交线路上优化路径的查询实验报告.docxVIP

山大公交线路上优化路径的查询实验报告.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
山东大学计算机科学与技术学院 数据结构课程实验报告 学号: I姓名: I班级: 实验题目:公交线路上优化路径的查询 实验学时:32 |实验日期: 硬件环境: 软件环境: 实验内容与设计: 1 ?实验内容: 问题描述: 最短路径问题是图论中的一个经典问题,其中的Dijkstra算法一直被认为是图论中的好 算法,但有的时候需要适当的调整Dijkstra算法才能完成多种不同的优化路径的查询。 对于某城市的公交线路,乘坐公交的顾客希望在这样的线路上实现各种优化路径的查 询。设该城市的公交线路的输入格式为: 线路编号:起始站名(该站坐标);经过的站点1名(该站坐标);经过的站点2名(该站坐 标);……;经过的站点n名(该站坐标);终点站名(该站坐标)。该线路的乘坐价钱。该线路 平均经过多少时间来一辆。车速。 例如:63: A(32, 45); B(76, 45); C(76, 90);……;N(100, 100) o 1 元。5分钟。1/每分 钟。 假定线路的乘坐价钱与乘坐站数无关,假定不考虑公交线路在路上的交通堵塞。 对这样的公交线路,需要在其上进行的优化路径查询包括:任何两个站点之间最便宜的 路径;任何两个站点之间最省时间的路径等等。 基本要求: 根据上述公交线路的输入格式,定义并建立合适的图模型。 针对上述公交线路,能查询获得任何两个站点之间最便宜的路径,即输入站名S, T 后,可以输出从S到T的最便宜的路径,输出格式为:线路x:站名S,…,站名Ml;换乘线路 x:站名Ml,…,站名M2; ???;换乘线路x:站名MK,…,站名T。共花费x元。 针对上述公交线路,能查询获得任何两个站点之间最省时间的路径(不考虑在中间 站等下一辆线路的等待时间),即输入站名S, T后,可以输出从S到T的考虑在屮间站等下一 辆线路的等待时间的最省时间的路径,输岀格式为:线路x:站名S,…,站名\11;换乘线路 x:站名Ml,…,站名M2;…;换乘线路x:站名MK,…,站名T。共花费x时间。 针对上述公交线路,能查询获得任何两个站点之间最省时间的路径(要考虑在中间 站等下一辆线路的等待时间),即输入站名S, T后,可以输出从S到T的考虑在中间站等下一 辆线路的等待时间的最省时间的路径,输出格式为:线路x:站名S,…,站名Ml;换乘线路 x:站名Ml,…,站名M2; ???;换乘线路x:站名MK,…,站名T。共花费x时间。 实现提示: 需深入考虑,应根据不同的应用目标,即不同的优化查询来建立合适的图模型。 实验设计: (1)实验需求: (1)输入数据:总的路线数目,各路线的站点数目,各站点的名称、位置坐标以及各 公交路线的速度及票价。 (2) 输出数据:输入数据的预处理结果(中间链表)与多个索引数组,三个不同权值 的邻接矩阵的值(距离,U寸间,票价),以及各种不同需求下公交线路的结果。 (3) 功能:实现在不同查询条件下最优公交线路的输出。 (2) 实现思想: 首先需要对输入的数据进行预处理。此处运用双向链表来存储各站点的名称、横纵坐标 及相对位置关系。然后用一个公交车Bus类来存储各个线路的票价、速度及总线路。 之后需要整合所有链表以生成邻接矩阵。首先将所有链表进行第一步处理,算出相邻两 点间距离存入第一个结点中原横坐标的位置,特别的,每个链表最后一个站点对应结点的相 同位置则存储为NoEdge (99999)o接着将各站点按顺序编号存于原链表纵坐标位置。接下 来将各路线的链表连接在一起形成一个存有全部路线的新链表who 1 eRoado 对who 1 eRoad进行处理。因为各路线中站点可能出现重复的情况,因此需要对编号进行 去重操作。遍历链表若发现某站点名出现过两次或两次以上,则将第二个以后的编号皆赋成 第一个的编号值,同时设置一个变量count来记录多次出现的的站点数。count初始值为0, 若岀现一次重复则count加1,同时后而所有的编号赋为原编号减去counto通过以上方法 来解决重复站点问题。 根据最终站点编号建立原始编号与最终编号的索引数组和最终编号与站点名的索引数 组,并提供逆向查找方法。最后生成以距离为邻接矩阵时依照的就是最终的编号。不过在生 成过程中还是按照总线路链表进行循环,遍历总路线链表并根据索引将对应的距离存入真正 的位置,其他位置均设为NoEdge。而生成以时间为权值和以票价为权值的邻接矩阵过程基 本一样,只不过是将对应位置的值除相应速度或换为相应票价乘上线路编号的平方(原因下 方解释)。 在最终邻接矩阵处理中主要运用Dijkstra算法。在吋间最少与距离最短查询时直接使 用Dijkstra算法即可。然而在票价最少时需要对算法进行调整。因为坐公交车时在一条线 路上一直乘坐只需要交一次车票钱因此不能直接将票价进行累加,然而不

文档评论(0)

ggkkppp + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档