城市公交查询算法的简单实现(原创)

本文介绍了如何使用SQL存储过程实现公交乘车路线的查询,包括直达和一次转乘的查询,无需复杂的图论算法和数据结构。通过创建站点和线路表,结合存储过程,实现了查询功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     这几天在做一个公交乘车路线查询应用,遇到了很多人都遇到的一个问题,就是如何快速查询出直达路线、转乘路线,而不需要进行复杂的算法编程。本人在参考了CSDN上很多牛人的经验后,做出一个不用Dijkstra、弗洛伊德等算法,不需要图或邻接表等复杂数据结构,使用纯SQL存储过程的实现方法。
    首先说明,这个方法只能实现直达路线、一次转乘的查询,而且不考虑最短路径等因素。如果转乘次数超过1次,那就不得不考虑寻找其它更好的方法了。

思路:直达的情况很简单,直接可以查询出来;一次转乘时,把所有包含起始站点和到达站点的路线分拣到2张临时表中,在这两张表中查询同时包含某个换乘站点,并且该站点在起始线路中起始站点之后、到达线路中到达站点之前,这样就能查询出来了;>1次转乘,查不出来:)
以下是实现方法:
1.用表tb_kmbusstations存放所有站点的集合
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tb_kmbusstations]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[tb_kmbusstations]
GO
CREATE TABLE [dbo].[tb_kmbusstations] (
    [idx] [int] IDENTITY (1, 1) NOT NULL ,
    [station] [nvarchar] (200) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

insert into tb_kmbusstations(station) select '12棵橡树庄园小区'
union all select '阿拉办事处'
union all select '阿拉中学'
union all select '阿依村'
union all select '安吉路口'
union all select '安康路'
union all select '安康路口(西园路口)'
union all select '安全新村'
union all select '八公里(贵昆路)'
union all select '巴士家园'
union all select '白龙村'
union all select '白龙路(昆理工大新迎区)'
union all select '白龙路口(白云路)'
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值