数据结构实验二-.docVIP

  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文档。上传文档
查看更多
数据结构实验二-

实 验 报 告 课程:: 实验名称:: 姓名: 实验日期 组: : 一、实验目的 掌握用图对实际问题进行抽象的方法,可以解决基本的问题; 掌握利用邻接表求解非负权值、单源最短路径的方法,即利用Dijkstra算法求最短路径,同时掌握邻接表的建立以及使用方法,能够解决相关的问题; 学会使用STL中的map抽象实际问题,掌握map,List,,priority_queue等 二、实验内容 使用图这种抽象的数据结构存储模拟的欧洲铁路路线图,通过Dijkstra算法求出欧洲旅行最少花费的路线。该实验应用Dijkstra算法求得任意两个城市之间的最少路费,并给出路费最少的路径的长度和所经过的城市名。 抽象数据类型及设计函数描述 抽象数据类型 class City: 维护一个城市的信息,包括城市名name,是否被访问过的标记visted,从某个城市到达该城市所需的总费用total_fee和总路径长度total_distance,求得最短路径后路径中到达该城市的城市名from_city。 class RailSystem: 用邻接表模拟欧洲铁路系统,该邻接表使用数据结构map实现,map的key-value值对的数据类型分别为string和list*Service,对应出发城市名和该城市与它能够到达的城市之间的Service链表。 class Service: 为铁路系统模拟了两个城市之间的直接路线,包括两个城市之间直接到达的费用fee,两城市之间的直接距离distance。 部分设计函数描述 RailSystem(const string filename) 构造函数,调用load_services(string const filename)函数读取数据 load_services(string const filename) 读取传入的文件中的数据并建立上述两个map以模拟欧洲铁路路线图 reset(void) 遍历cities图,初始化所有城市的信息:visted未访问,total_distance最大值,total_fee费用最大值,from_city为空 ~RailSystem(void) 析构函数,用delete将两个map中所有使用new操作符开辟的空间删除 void output_cheapest_route(const string from, const string to, ostream out); 输出两城市间的最少费用的路径,调用calc_route(string from, string to)函数计算最少费用 calc_route(string from, string to) 使用Dijkstra算法计算from和to两个城市间的最少费用的路径 采用的存储结构 mapstring, listService* outgoing_services 用来保存由一个城市出发可以直接到达的城市名及这两个城市之间的路径信息。 listService* 以service为指针的list表,保存两城市间的路径。 mapstring, City* cities 用来保存所有城市信息,通过城市名查找该城市有关信息。 priority_queueCity*, vectorCity*, Cheapest candidates 存储候选的遍历城市,City*是优先队列存储的对象类型,vectorCity*是该对象的向量集合,Cheapest是比较规则。 三、实验环境 调试软件:Microsoft visual studio 2012 上机地点:综合楼311 机器台号:笔记本 四、实验过程与分析 主要算法 该实验主要用到了Dijkstra算法,这个算法要求所有边的权值非负,提出了按路径长度递增的顺序逐步产生最短路径的算法,首先求出长度最短的一条路径,然后参照它求出长度次短的一条路径,以此类推,指导顶点到其他顶点的最短路径全部求完为止即可解决该实验的问题。 calc_route(string from, string to)函数 利用优先权队列和Dijkstra算法,计算任意两城市之间费用最少的路径,优先权队列按照费用由大到小的顺序入队。 首先初始化所有城市的信息。通过迭代器遍历它的邻接链表,得到邻接城市名,当这个城市未被被访问过且从弹出的城市到该城市的费用大于这两个邻接城市间费用和出发城市目前的最少费用之和,更新从出发城市到该城市的费用,并且记录这个城市的经由城市为弹出的城市名并将这个城市入栈,同时更新目前的路径长度。 代码如下: reset();//初始化所有城市信息 cities[from]-total_fee = 0; cities[from]-total_distan

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档