基于广度优先的公交换乘搜索算法

  • 格式:doc
  • 大小:83.50 KB
  • 文档页数:1

基于广度优先的公交换乘搜索算法
在一个城市中,所有站点是通过公交线路联结在一起的,可以将整个城市的所有站点看作是一个连通图上的点。

从任一站点出发,经过有限次转车一定可以到达另一个站点。

考虑到实际情况,需要规定一个转车上限,因为超过一定次数的转车基本上没有乘客会选用。

算法的具体步骤:
步骤1:确定起始站点和目的站点分别记为A 和B 搜索公交数据库,经过起始站点A 的公交线路存为)(i X 为正整数m m i ),2,1( =,经过目的站点B 的公交线路存为 )(j Y 为正整数n n j ),2,1( =。

判断是否有)()(j Y i X =,将满足条件的存入Z 。

若1≥Z ,则公交线路)(i X 即)(j Y 为从站点A 到站点B 的直达可行线路,输出结果并结束运算。

步骤2:若0=Z ,则搜索公交数据库,将公交线路)(i X 所包含的公交站点存为公交换乘矩阵),(u i O 为正整数g g u ),2,1( =,公交线路)(j Y 所包含的站点存为公交换乘矩阵),(v j P 为正整数h h v ),2,1( =。

判断是否有),(),(v j P u i O =,将满足条件的存人W ,若1≥W ,则站点),(u i O 即),(v j P 为从站点A 到站点B 的一次换乘站点,公交线路)(i X ,)(j Y 为换乘一次的可行路线,输出结果并结束运算。

步骤3:若0=W 搜索公交数据库,将经过站点),(u i O 的公交线路存为
)
(k R 为正整数p p k ),2,1( =,公交线路)(k R 所包含的站点),(t k G 为正整数s s t ),2,1( =,扩充到公交换乘矩阵),(u i O 中。

判断是否有),(),(v j P t k G =,将满足条件的存人W ,若1≥W ,则站点),(t k G 即),(v j P 为从站点A 到站点B 的二次换乘站点,公交线路)(i X ,)(k R ,)(j Y 为换乘二次的可行路线,输出结果并结束运算。

步骤4:设定换乘次数的上界N ,然后可在不大于N 次换乘的某次循环中找到可行路径,若可行路径有多条,则考虑综合因素最高的为最优路径并输出。

按上述步骤如果没有找到合适的公交线路,则输出“没有找到换乘次数不超过N 次的最优换乘方案”,结束运算。