交通咨询系统中时间最省算法的实现

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:boyhill
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:本文根据交通咨询系统中图的特点,基于Dijkstra算法,自动求取了从起始城市到目的城市的时间最短的行程安排。在算法的具体实现过程中给出了一种新的数据结构,这个数据结构使得算法结构更加简洁。
  关键词:最短路径;Dijkstra算法;交通咨询系统
  中图分类号:TP301文献标识码:A文章编号:1009-3044(2007)05-11366-02
  
  1 引言
  惜时如金的现代人,希望能够事先安排好自己的旅程,以使整个旅程所耗时间最少,而且自己在整个旅程中具体乘坐几点钟的班车或航班也是很清楚的。这就使得人们要求交通咨询系统能够提供旅途时间最省路径的咨询。最短路径不仅仅指一般地理意义上的距离最短,还可引申到其他的度量,如时间、费用、线路容量等。相应地,最短路径问题就成为最快路径问题、最低费用问题等。交通咨询系统中求取时间最省路径的核心算法是最短路径算法.经典的最短路径算法Dijkstra算法是目前多数系统解决最短路径问题采用的理论基础,只是不同系统对Dijkstra算法采用了不同的实现方法。要在计算机上建立一个可以求取时间最省路径的交通咨询系统,可以采用图的结构来表示实际的交通网络。图中的顶点表示城市,边表示城市间的交通联系。我们用C#实现了这样一个交通咨询系统,该系统可以求取时间最省路径和路径最短路径,本文对系统中如何求取时间最省路径进行了阐述。
  
  2 经典Dijkstra算法介绍
  Dijkstra是一个按路径长度递增的次序产生到各个顶点的最短路径算法。Dijkstra算法的基本思路是:假设每个点都有一对标号(dj,pj),其中dj是从起源点s到点j的最短路径的长度(我们认为从顶点到其本身的最短路径是零路,其长度等于零);pj则是从s到j的最短路径中j点的前一点(我们常讲路径中j点的前驱节点)。求解从起源点s到点j的最短路径算法的基本过程如下:
  (1)初始化。起源点设置为:① ds=0,ps为空;② 所有其他点:di=∞,pi=?;③ 标记起源点s,记k=s,其他所有点设为未标记的。
  (2)检验从已标记的点k到其直接连接的未标记的点j的距离,并设置:dj=min [dj,dk+dkj],式中,dkj是从点k到j的直接连接距离。并标记j的前驱点信息k。临时标志所求出的信息。
  (3)选取下一个点。从所有临时标记的结点中,选取dj中最小的一个i:di=min [dj,所有临时标记的点j],点i就被选为最短路径中的一点,并设为已标记的。
  (4)如果所有点已标记,则算法完全退出,否则,记k=i,转到(2)再继续。
  用经典Dijkstra算法求得的是从某个源点到其余各顶点的最短路径,在我们这个交通咨询系统中求的是从某个源城市到另一个目标城市的路径最短或时间最省路径,为此我们在上述经典Dijkstra算法的第(4)步中否则前可加入:或者i就为目标点j也结束算法。这样我们的算法在求得所需的路径后就可结束算法,不必求得源城市到其它所有城市的最短路径。
  
  3 时间最省算法的设计
  3.1 数据结构的设计
  我们在这个交通咨询系统中用Dijkstra算法求某个源城市到某个目标城市的时间最省路径,设计一个什么样的数据结构可以简便求得这样一条路径呢?我们把我们的系统抽象在一个有向图上来实现,在求一个源城市到某个目标城市的最短路径时,我们注意到沿途所经过的城市(中间节点)的入度都是1,出度都是≥1的,根据这一点我们考虑把前一城市的出发天序数和出发时间信息保存到当前节点中来,这样我们可以大大简化具体的实现算法。在求解时间最省路径时我们设计如下两个类:
  类1:
  public class city
  {public int id; //城市代码
  public string sCityName; //城市名字
  public int x; //城市坐标 X
  public int y; //城市坐标 Y 绘图用,不绘图可省略
  public int dist; //表示起始城市到当前城市的最短路径
  public bool flag; //计算标志
  public int idPreCity; //最短路径中的前趋城市节点代码
  public float minTm; //表示起始城市到当前城市所需的最短时间
  public float arrivalTime;//表示到当前城市的时间
  public float preCityStartTime;//表示到当前城市路径中的前趋城市的出发时间
  public int arrivalDay; // 表示到当前城市的天序数
  public int preCityStartDay; //表示到当前城市路径中的前趋城市的出发天序数 }
  类2:
  public class mtNode
  { public int idCity;//表示有航班信息
  public int nDistance; //表示航线距离
  public int[] iTime = new int[4]; //表示航班时间信息,假设有4个航班 }
  交通咨询系统中的图是一个非完备的拓扑关系图,只涉及点线不涉及面。类1是城市节点属性设置,在算法中动态生成的一些信息(如:最省时间,到达时间,到达天序数,前一城市的出发时间等)都存放在这个结构中。类2是城市间的交通联系信息的属性设置,是图节点之间的关系属性设置,我们以邻接矩阵来存储这些关系数据,邻接矩阵节点属性中矩阵的行和列隐含表示了某一线路的起点和终点城市信息。设置了上述两个类后,在程序中我们需要维护两个数组:一个数组存放城市信息(包括一些动态信息),一个数组存放城市之间的联系信息(如:cityNode cities[CITYNUMBER]; mtNode mts[CITYNUMBER*CITYNUMBER];其中的CITYNUMBER是我们这个系统中的城市数,该系统考虑了以后的可扩展性)。
  3.2 时间最省算法的详细设计
  根据3.1中设计的数据结构和1中给出的经典Dijkstra算法,我们设计了针对我们这个交通咨询模拟系统的时间最短路径算法。为求把算法思想表示得更清楚我们特作出该算法的PAD图如下:
  
  4 实现
  基于上述的设计,我们用C#编写程序实现了该系统(其中路径最短算法分析相同,数据结构也相同,在此略)。该系统中有关一些地图信息是从文件中读取的,这样有利于程序的扩展。该系统有很强的用户友好性,起始城市和目的城市可以在地图中用鼠标左右键选取,也可在下拉列表框中选取。计算结果在图形中显示,也在文本中输出,同时还可输出到文件保存。
  该系统的初始界面如图1所示:
  图1中已选择好初始城市和目的城市,我们点击时间最短按钮,就可把时间最短路径求出来,如图2示:
  我们可把计算结果以文本形式显示如图3:
  实现的具体代码在此就不一一列出了,有需要的同仁可直接向作者索取。本文讲述了交通咨询系统中时间最省路径求取的分析和实现,充分地从交通咨询系统中图的特点来巧妙设计数据结构,接下去的工作要更多地考虑算法改进,以更快地速度求得一条最短路径,以适应现在对这类系统的实时要求。
  参考文献:
  [1]乐阳,龚健雅. Dijkstra最短路径算法的一种高效率实现[J]. 武汉测绘科技大学学报,1999,24(3):209-212.
  [2]Zhan F B. Three Fastest Shortest Path Algorithms on Real Road Networks. Journal of Geographic Information and Decision Analysis, 1997,1(1):69-82.
  [3]严蔚敏, 吴伟民. 数据结构(C语言版)[M]. 北京:清华大学出版社,2006.
  本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
其他文献
中国目前正在快速发展新能源——新能源在帮助中国完成经济转型,实现能源安全的过程中发挥了巨大的作用。主要集中研究新能源政策的颁布如何影响上市公司的股价。以新能源上
本文阐述了利用JDOM编程实现数据库到XML文件转换的基本方法.从而为实现各异构平台之间的数据交换提供了可能性.
本文对模式、设计模式的概念和特征进行简单的介绍。对有代表性的几种设计模式进行深入的讨论。主要有表示层模式包含与JSP技术相关的模式,业务层模式包含与EJB技术相关的模式
以添加Na2CO3和NH3.H2O为络合剂的微波多元醇法制备碳纳米管载Pd催化剂(Pd/MWCNTs),并考察了络合剂对催化剂甲酸电催化氧化性能的影响。结果表明,NH3.H2O络合剂制备的Pd/MWCNTs
目的研究硫辛酸在神经细胞老化过程中对细胞内源性抗氧化分子谷胱甘肽(GSH)的作用。方法采用无血清培养神经母细胞瘤细胞建立实验性神经细胞老化模型。设立100μmol/L硫辛酸(LA)
目前,有人在使用Java,有人在学习VC。如果能将Java和VC“沟通”起来,实现二者的互相调用,那么必定可以避免重复的工作,使编程变得更加轻松。文章对如何在Java中调用VC编写的
讨论了区域水资源优化配置算法。首先建立了区域水资源优化配置的数学模型,然后提出了采用多目标蚁群遗。传算法解决这个多目标约束优化的问题。最终通过应用实例验证了算法的
目的:探讨全麻药物舒芬太尼和芬太尼用于神经外科手术患者的麻醉恢复情况、拔管的时间、围手术期患者的血流动力学以及对机体应激反应的影响。方法选取我院2012-01-2012-12神
目的探讨双侧大脑前动脉分布区梗死的临床特点和机制。方法回顾分析3例急性双侧ACA分布区脑梗死患者的临床特点和头MRI、MRA等资料。结果 3例患者均有脑血管病危险因素,包括
作者针对实际应用AutoCAD软件绘图中,图形数据量大,用户绘图速度慢的问题,在文中提出了一些实践操作技巧,可以帮助用户有效地提高绘制复杂图形的速度。