最短路径算法_参考文档.doc

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

最短路径算法——Dijkstra and Floyd算法 ? ????最短路径算法——Dijkstra算法???? ??? Dijkstra算法在刚开始在学数据结构的时候,完全没弄明白,主要是也不怎么想去弄明白。而从学校出来到现在,最短路径算法都没有实际运用过,最近在一个GIS项目中总算用到了,于是乎把教材重温了下,同时查阅了网上一些资料,借鉴了一些别人的东西,并顺利用写进了项目中,文中的主要代码来自于园子里的一位大哥,这位大哥对通用框架的研究很深入,他的链接为:/archive/2005/09/29/246677.html(最短路径)。另外,文章的最后面的一些链接是我找资料的时候用到过的,有兴趣 的朋友可以去看看。 最短路径分析在事故抢修、交通指挥、GPS导航等行业应用中使用的非常广泛, 以至于大多数GIS平台都会把这个分析功能作为一个最基础的功能集成进去,如ARCGIS,SuperMap等。个人感觉想要了解这个算法的来龙去脉,一方面是参与相关书籍仔细理解,另外一个最重要的是要去调试代码。由于历史原因,对于书上的伪C代码,我是完全不感兴趣的,而且由于有严格的数学证明,所以看起来相对较难,而对于面向对象实现的算法,我很感兴趣,也感觉很容易理解,所以一边针对C#实现的面向对象代码再一边对照书籍,感觉理解的层次就加深了。 ?Dijkstra算法又称为单源最短路径,所谓单源是在一个有向图中,从一个顶点出发,求该顶点至所有可到达顶点的最短路径问题。要顺利实现算法,要求理解Dijstra的算法,同时还要理解图的一些基本概念,图由节点和边构成,将节点和边看成对象,每个对象有自己的特有属性,如在GIS中,一个节点必须都有ID,横坐标,纵坐标等基本属性,边有起点节点,终点节点,长度等属性,而最短路径分析,就是根据边的长度(权值)进行分析的。 边的定义如下: ????? ??? public?class?Edge ????{ ????????public?string?StartNodeID; ????????public?string?EndNodeID; ????????public?double?Weight;?//权值,代价???????? ????} ? ? ????? 节点的定义: ????? ??? public?class?Node ????{ ????????private?string?iD?; ????????private?ListEdge?edgeList?;//Edge的集合--出边表 ????????public?Node(string?id?) ????????{ ????????????this.iD?=?id?; ????????????this.edgeList?=?new??ListEdge()?; ????????} ???????#region?property ???????? ????????public?string?ID ????????{ ????????????get ??????????{ ????????????????return?this.iD?; ????????????} ????????} ????????public?ListEdge??EdgeList ????????{ ????????????get ????????????{ ????????????????return?this.edgeList?; ????????????} ????????} ????????#endregion ????} ? ? ????? 本次用于分析的拓扑图如下:(A为起点,D为终点,边上的数字为权值)   ?? ? ? ????? 利用上述的边与节点的定义,可以通过代码简单的构成如下图: ????? ??? public?class?Graph ????{ ????????public?ListNode?m_nodeList?=?null; ????????public?Graph() ????????{ ????????????m_nodeList?=?new?ListNode(); ????????} ????????///?summary ????????///?获取图的节点集合 ????????///?/summary ????????public?ListNode?NodeList ????????{ ????????????get?{?return?this.m_nodeList;?} ????????} ????????///?summary ????????///?初始化拓扑图 ????????///?/summary ????????

文档评论(0)

zilaiye + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档