交通网络中的最短路径算法探索

来源 :计算机光盘软件与应用 | 被引量 : 0次 | 上传用户:lumuming
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:数据结构是计算机学科的核心课程,有向图是图结构的重要内容之一。在计算机中如果用图的邻接矩阵存储带权有向图,用权值表示各有向边的长度,那么利用有向图的最短路径理论就可以解决交通网络中的路线问题,如某个源点到其余各顶点的最短路径以及所有顶点之间的最短路径等等,从而达到资源最省的目的。
  关键词:源点;顶点;终点;有向图;最短路径
  中图分类号:TP391.41
  1 求从某个源点到其余各顶点的最短路径
  针对上述邻接矩阵,为了便于分析和计算机存储,引进一个辅助向量disc,它的每个分量disc[i]表示当前所找到的从源点V0出发到达终点Vi的最短路径,初态为:若从源点V0到顶点Vi没有边,则disc[i]为∞,用计算机中可表示的最大正数MAXNUM表示,若从源点V0到顶点Vi有边,则disc[i]为该边上的权值。设第一条最短路径为,其中k满足:
  disc[k]=min{disc[i]|Vi∈V-V0},v是G的顶点的集合。
  下面求下一条最短路径。
  假设下一次要到达的终点是Vj,那么最短路径有两种可能,一种是,另一种是,与之相对应,其长度可能是从V0到Vj的有向边上的权值,也可能是disc[k]与从Vk到Vj的有向边上的权值之和。如果S是已求得的最短路径的终点的集合,那么下一条最短路径必然是从源点V0出发,中间只经过S中的顶点就可到达的那些顶点VZ(VZ∈V-S)的路径中的一条。
  所以通常情况下,下一条长度次短的最短路径的长度必然是:
  disc[k]=min{disc[i]|Vi∈V-S}
  在每一次求得一条最短路径之后,将终点Vk加入集合S,对所有的Vi∈V-S修改其disc[i]:
  disc[i]=min{disc[i],disc[k]+Edge[k][i]}
  其中,Edge[k][i]是边上的权值。
  综上所述,用程序设计语言实现该算法如下:
  const int Numvers=100;//常量定义,图中最大顶点个数
  class Graph{ //图的类定义
  private:
  int Edge[Numvers] [Numvers];//存放图的邻接矩阵
  int disc[Numvers]; //存放从顶点V0到其它各顶点的最短路径长度
  int path[Numvers]; //存放在最短路径上该顶点的前一顶点号
  int S[Numvers]; //已求得的在最短路径上的顶点号
  public:
  void ShortestPath(int,int);
  };
  void Graph::ShortestPath(int n, int v){ //G是一个具有n个顶点的带权有向图
  for(int i=0;i  disc[i]=Edge[v][i];
  S[i]=0; //已求出最短路径的顶点集合初始化
  if(i!=v && disc[i]  else path[i]=-1; //路径存放数组初始化
  }
  S[v]=1; disc[v]=0; //顶点V加入顶点集合
  for(i=0;i  int min=MAXNUM;int u=v;
  for(int j=0;j  if(!S[j] && disc[j]  S[u]=1; //将顶点u加入集合S,表示它已在最短路径上
  for(int w=0;w  if(!S[w] && Edge[u][w]  disc[w]=disc[u]+Edge[u][w]; path[w]=u;
  }
  }
  }
  引用上述算法,在图1中,从顶点V0出发到其它各顶点的最短路径的逐步求解过程如下:源点 终点
  2 所有顶点之间的最短路径
  要求交通网络中每一对顶点之间的最短路径,可轮流以每一个顶点为源点,其余顶点为终点多次调用上述算法来完成。但还可以用依次加入中间顶点,取得最短路径的方法:
  (1)使用图的邻接矩阵存储带权有向图;
  (2)取任意两个顶点Vi和Vj,其边上的权值作为路径长度;
  (3)增加中间顶点,在增加中间顶点的过程中,总是以路径长度较短者作为新路径代替原路径;
  (4)修改邻接矩阵的元素,用新取得的较短路径长度代入。
  算法如下:
  定义一个n阶方阵序列:Z(0),Z(1),…,Z(k),…,Z(n),
  当k=0时,Z(k)[i][j]=Edge[i][j];
  当1≤k≤n时
  Z(k)[i][j]=min{Z(k-1)[i][j],Z(k-1)[i][k]+ Z(k-1)[k][j]}。
  下面用程序设计语言实现该算法:
  void Graph::AllLengths(int n) { //Edge[n][n]是一个具有n个顶点的图的邻接矩阵。
  //z[i][j]是顶点i和j之间的最短路径长度。
  //path[i][j]是相应路径上顶点j的前一顶点的顶点号,在求最短路径时图的类定义中//要修改path为path[Numvers][Numvers]。
  for(int i=0;i  for(int j=0;j  z[i][j]=Edge[i][j];
  if(i< >j && z[i][j]  else path[i][j]=0; //i到j无路径
  }
  for(int k=0;k  for(i=0;i  for(j=0;j  if(z[i][k]+z[k][j]  z[i][j]=z[i][k]+z[k][j];path[i][j]=path[k][j]; //縮短路径长度,绕过k到j
  }
  }
  参考文献:
  [1]许卓群.数据结构[M].北京:中央广播电视大学出版社,2003:226-254.
  [2]左春荣.数据结构[M].北京:中国物质出版社,2008:99-118.
  [3]殷人昆.数据结构[M].北京:清华大学出版社,2010:283-286.
  作者单位:营口职业技术学院,辽宁营口 115000
其他文献
【正】 荟萃群刊,博采众长,是文摘类刊物的优势。如何在众多的稿件中,做到慧眼识英雄,淘洗出富有新意,反映学术界讨论热点与难点,突出当今学术领域新情况、新变化、新趋势的
计算机网在日常生活中的应用,对提高工作效率具有重要意义,已经深入到经济生活的方方面面。在认识到计算机网络带来具大优势的同进,还要看到,计算机网络可靠性问题的严重性。可靠
随着计算机技术的快速发展,计算机网络成为企事业单位及人们生活的重要工具,为社会带来了巨大的经济效益和社会效益。在社会对计算机网络的依赖程度不断提高的同时,计算机网
简要地介绍硒静电X线摄影、CR数字摄影成像系统、X线干片激光成像系列产品、数字化诊断技术,以及电子X线摄影等.
【正】 1900年2月15日(农历正月十九日),出生于浙江省嵊县东乡白泥坎村。原名魏义荣,小名荣佬。祖上世代务农。祖父魏金才、父亲魏仁富,母亲叶金妹都是勤俭朴实的农民。祖父
高校网络信息管理平台是保证校内资源共享与信息交流的媒介,需要高校网络管理部门进行系统化的实践和管理,构建高效网络信息管理平台的基本框架,科学规划管理方案,保证校内信息畅
【正】 英国批判现实主义作家狄更斯认为:“密西西比河是一条流着泥桨的浊流,除了每天夜里有无伤的闪电向漆黑的天空闪耀外,没有一点愉快的东西。”可是对于美国另一个批判现
根据逆变电路所用开关元件的工作原理,分析了多个单端式弧焊逆变器输出整流电路中同相位并联电路和不同相位并联电路各自的特点.结果表明,双单端正激逆变电路的两路逆变器发
计算机网络技术已在金融经济、科教文化、国防军事等领域得到广泛普及和应用,计算机网络提高了人们的工作效率和生活质量,同时也带来了潜在的威胁,网络安全已经成为影响网络发展