公路网络最短路的计算方法 【技术领域】
本发明涉及一种利用计算机程序计算公路网络最短路的方法。
背景技术
目前在城市交通、运输调度和公路导航中经常需要对一个公路网络快速反复地连续计算两点间的最短路。申请人在申请号为93115221.6的专利申请中披露了一种大型网络单源的最短路的线性计算方法,但该方法计算速度不够快,计算步骤繁杂,特别是该方法中的β值很小时,会使计算速度变慢,因而其应用受到限制。
【发明内容】
本发明的目的是提供一种公路网络最短路的计算方法,以弥补现有计算方法的上述不足。
一种公路网络最短路的计算方法,以标明相邻两地之间距离的地图为依据,并采用下述的计算方法编成计算机程进行计算:
设M为一公路网络,V(M)为M中所有地点的集合,d(u,v)为地点u到地点v的公路长度,d(v)为起点x到地点v所走的某一条线路的长度,N(v)为与地点v相邻的公路网络M中已有地地点的集合。
(a)令Max为公路网络M中所有道路长度的总和;Min为公路网络M中最短道路的长度;
d(x)=0,S=V(M)-{x},x为起点,{x}为只包含起点x的集合;d(v)=d(x,v),v∈N(x);d(v)=Max,v∈S-N(x);Y=N(x);进入(b);
(b)令ORD=Min+min{d(u)|u∈Y},min{d(u)|u∈Y}为在集合{d(u)|u∈Y}中求一个最小值;求Y的一个子集X,使X={v|d(v)<ORD};如果止点y∈X,则算法终止,否则S=S-X,Y=Y-X,进入(c);
(c)对于X中的每一个地点v,依次进入(d);完毕之后返回到(b);
(d)对于所有地点u,u∈N(v)∩S,使d(u)=min{d(u),d(v)+d(u,v)},min{d(u),d(v)+d(u,v)}为在d(u)和d(v)+d(u,v)中取最小的一个;Y=Y∪{u};完毕之后返回到(c)。
本发明的优点是计算速度加快,计算步骤简单,且不受现有计算方法(93115221.6)中β的值大小的影响。本发明用C语言编程,在AST P2-/386SX/20机上分别对295点、590点、885点、1180点的公路网络进行计算,用现有计算方法计算,分别是0.05秒,0.11秒,0.16秒,0.22秒。而使用本发明的方法计算分别是0.04秒,0.09秒,0.12秒,0.14秒。
数据对比可以看出公路网络的点数越大,计算速度提高得越快。
【附图说明】
附图1为本发明的计算方法的程序框图。
附图2为山东省荣成附近的公路地图。图中的数字表示两地间距离的公里数。
【具体实施方式】
下面以实施例和附图进一步说明本发明。
本实施例利用山东省荣成附近的公路地图,以其中龙须岛为起点,崖头为止点,按如下的计算机程序计算该两地间的最短路。
从(a)起始:Max=199,Min=7,d(龙须岛)=0,S={马家疃,泊于家,埠柳村,马道河,俚岛,孟格庄,崖西头,寻山,隆峰村,崖头,阴子夼},N(龙须岛)={马家疃},d(马家疃)=18,d(泊于家)=199。d(埠柳村)=199,d(马道河)=199,d(俚岛)=199,d(孟格庄)=199,d(崖西头)=199,d(寻山)=199,d(隆峰村)=199,d(崖头)=199,d(阴子夼)=199,Y={马家疃},进入(b);
循环一:
ORD=7+18=25;因为d(马家疃)=18<25,所以取Y的子集X={马家疃};S=S-X={泊于家,埠柳村,马道河,俚岛,孟格庄,崖西头,寻山,隆峰村,崖头,阴子夼},Y=Y-X={},进入(c):
对于X中的地点马家疃,进入(d):
泊于家∈N(马家疃)∩S,d(泊于家)=min{d(泊于家),d(马家疃)+d((泊于家,马家疃)}=min{199,18+20}=38,Y=Y∪{泊于家}={泊于家};
埠柳村∈N(马家疃)∩S,d(埠柳村)=min{199,18+12}=30,Y=Y∪{埠柳村}={泊于家,埠柳村};
马道河∈N(马家疃)∩S,d(马道河)=min{199,18+10}=28,Y=Y∪{马道河}={泊于家,埠柳村,马道河};返回(c),进入(b)。
循环二:
ORD=28+7=35,X={埠柳村,马道河},S={泊于家,俚岛,孟格庄,崖西头,寻山,隆峰村,崖头,阴子夼},Y={泊于家},进入(c):
对于X中的地点马道河,进入(d):
d(俚岛)=min{199,28+7}=35,Y=Y∪{俚岛}={泊于家,俚岛},返回(c),对于X中的地点埠柳村,进入(d):
d(孟格庄)=min{199,30+15}=45,Y=Y∪{孟格庄}={泊于家,俚岛,孟格庄}
d(崖西头)=min{199,30+13}=43,Y=Y∪{崖西头}={泊于家,俚岛,孟格庄,崖西头},返回(c),进入(b)。
循环三:
ORD=35+7=42,X={泊于家,俚岛},S={寻山,隆峰村,孟格庄,崖西头,崖头,阴子
夼},Y={孟格庄,崖西头},进入(c):
对于X中的地点俚岛,进入(d):
d(寻山)=min{199,35+12}=47,Y=Y∪{寻山}={寻山,孟格庄,崖西头},
d(隆峰村)=min{199,35+14}=49,Y=Y∪{隆峰村}={寻山,隆峰村,孟格庄,崖西头},返回(c),对于X中的地点泊于家,进入(d):
d(孟格庄)=min{45,38+9}=45,Y={寻山,隆峰村,孟格庄,崖西头},返回(c),进入(b)。
循环四:
ORD=43+7=50,X={寻山,隆峰村,孟格庄,崖西头},S={崖头,阴子夼},Y={},进入(c):
对于X中的地点隆峰村,进入(d):
d(崖头)=min{199,49+15}=64,Y=Y∪{崖头}={崖头},返回(c),对于X中的地点寻山,进入(d)
d(崖头)=min{64,47+12}=59,返回(c),对于X中的地点崖西头,进入(d)
d(阴子夼)=min{199,43+7}=50,Y=Y∪{阴子夼}={崖头,阴子夼},返回(c),进入(b)。循环五:
ORD=50+7=57,X={阴子夼},S={崖头},Y={崖头},进入(c):
对于X中的地点阴子夼,进入(d):
d(崖头)=min{59,50+13}=59,Y=Y∪{崖头}={崖头},返回(c),进入(b)。
循环六:
ORD=59+7=66,X={崖头},算法终止。并得出从龙须岛到崖头的最短路长为59公里。
路径为:龙须岛经马家疃、马道河、俚岛、寻山到崖头。
本计算方法亦可用于含有有向道路的网络。如果S=0,则可以求出起点到其它各点的最短路。本计算方法不仅可计算出最短路的长度,而且能计算出该最短路所经过的地点。只要记录下计算的过程即可。