公交换乘算法
⑴ 公交换乘算法(C++)
这个算法就是这个公交网站的核心。
⑵ 公交2次换乘算法
呃,我来给你说说。先假设一个情况:你的公交次数卡里面有10次余额。你拿公交次数卡在8:13第一次刷卡(还剩下8次),那么在10:13之内的这段时间,你可以在任意一辆接受次数卡的公交车上(除了你在8:13时刷卡的那辆公交车,当然一般不会出现这种情况)再另外刷3次(仍然剩8次)。但是有一个条件:你刷过之后的公交车(注意是公交车,不是公交线路)是不再接受你再次刷次数卡的,这时就要扣你电子钱包里面的钱,如果没有电子钱包你就只有投币。2小时之内你刷卡的次数超过了4次,比如你在8:13刷了一次,在10:13之内,你已经又刷了3次,那么在10:13之内你仍旧需要转乘的话就要另外计算次数。比如你在9:55的时候你已经是乘坐了四次,达到了最高次数,那么转乘就要重新扣你的次数。9:55时你又转乘另外一趟公交车刷次数卡,这时就要重新扣你的次数(只剩下6次)。刷卡的原则是次数优先,如果没有次数就扣电子钱包的钱,如果两种方式都不能足够支付你乘车费用,就只能投币了。转乘不分普通车和中级车,你在普通车上刷了之后拿到中级车上也是不扣次数,但要计入转乘次数的记录。
⑶ 网上可以查到公交路线从一点到另一点的换乘方案,这是用什么算法实现的呢
http://www.checi.cn/search_bus.asp?p=1&cid=1&buttons=xl&q=%C1%F9%C0%EF%C7%C5+%CA%D7%B6%BC%CC%E5%D3%FD%D1%A7%D4%BA&k=xl 车次网〉公交查询,可以按公交线路、公交站点、公交换乘查询,收录全国 356 个城市公交情况。
⑷ 公共交通线路的搜索是如何实现的简称公交换乘算法
最核心的算法正是所谓的最短路径算法,这个比较简单
但是 要把算法用到公交换乘这个里面去 数据的组织准备 程序效率优化 特殊情形考虑等 是相当地有工作量的
⑸ 求公交换乘算法程序
用一个邻接表有向图来表示一个公交系统
如果乘坐某辆公交车能从站点u到达站点v而不需要换线、调头,那么添加一条有向边e=(u,v),并且在边e上附加信息:从u到v的距离(即该边的权值)、该边所属的公交车编号、该边在该公交线路的哪个方向上(因为有可能同一条公交线路两个方向经过不同的站点)
之所以用邻接表是因为这样的图是有重边的
当查询从节点i到节点j的换乘线路时,用dijkstra找出i和j之间的最短路径,那么根据这条路径上的边的附加信息就知道要怎么换乘了
另外,如果需要知道路径最短的基础上怎样换乘的次数最少(也就是在上述的图中经过的边数最少),可对dijkstra作少量调整,对于图中的每个点u,除了记录当前找到的到该点的最短距离dis[u]以及该点的前趋pi[u],还要记录在这样的最短距离和前趋下从起点到该点经过的最少的边数min_edge[u]
那么作dijkstra的时候,对于当前刚找到的路径最短的点u,以及从点u出发的某条边e=(u,v),如果dis[u]+e.length==dis[v]
&&
min_edge[u]+1<min_edge[v](也就是经过边(u,v)与原先的到v的最短路径长度相同但是经过(u,v)可以得到边数更少的路径,那么也要采用(u,v))
回溯是效率非常低的算法,如果没有非常好的优化方案,没事少用