求公交换乘算法程序

2024-12-20 07:19:19
推荐回答(2个)
回答1:

用一个邻接表有向图来表示一个公交系统
如果乘坐某辆公交车能从站点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
回溯是效率非常低的算法,如果没有非常好的优化方案,没事少用

回答2:

您好 您的这个公交换乘算法有了吗