公交路线查询算法
今天跟亮猪谈到公交查询,不负责任的说了句很简单吗……但又一想不那么简单。
费了点时间,想个如此算法:
数据库中录入每一路公交走的线路包括途径站点,及站点间距离。
假设查询 从甲地到乙地的乘车路线
1,查询经过甲地的所有公交车组成集合B1,经过乙地的所有公交车组成B2
2,B1,B2取交集得到的公交车集合就是所有的直达车,比较路径长短,选择最佳。
但是,如若没有直达(即B1,B2交集为空)怎么办?
3,取车集合B1中所有车从甲地到终点站途径的所有站点集合P1,取车集合B2中所有车从始发站到乙地途径的所有站点得集合P2,取P1,P2的交集组成的车站集合P3就是转乘站点的集合。
4,假设P3集合中,有一个站点是圆明园东门站,取B1中在此停车的车组成集合B3,取B2中在此停车的车组成集合B4,那么B3中的任一辆车与B4中的任一辆车组合就是可以从甲地经圆明园东门站倒车到乙地的方案。
5,按4中方法罗列p3集合中每个站点的转乘方案。最后比较所有的转乘方案,选择最佳
以上是倒乘一次的方案,若仅倒乘一次还不能到达怎么办?——告诉查询者:您还是打的去吧!^_^
附加:公交查询系统的数据存储设计
又顺便考虑了下数据存储的设计,^_^。
如果采用传统的关系数据库设计起来可能有些困难和麻烦,采用XML设计更理想一点。如下:
记录每一路公交车的行车路线,及站点间的距离。
<Bus>
<Number>743路</Number>
<Route>
<Stop>
<Name>中央党校北门</Name>
<Distance>0</Distance>
<!--距离始发站的距离,始发站为0-->
</Stop>
<!--……
……
……-->
<Stop>
<Name>圆明园东门</Name>
<Distance>10</Distance>
</Stop>
<!--……
……
……-->
<Stop>
<Name>西直河</Name>
<Distance>20</Distance>
</Stop>
</Route>
</Bus>