zoukankan      html  css  js  c++  java
  • 最短乘车路线查询示例.sql

    CREATE TABLE T_Line(
    ID      nvarchar(10),  --公交线路号
    Station nvarchar(10),  --站点名称
    Orders  int)           --行车方向(通过它反应每个站的上一个、下一个站)
    INSERT T_Line
    SELECT N'8路'  ,N'站A',1 UNION ALL
    SELECT N'8路'  ,N'站B',2 UNION ALL
    SELECT N'8路'  ,N'站C',3 UNION ALL
    SELECT N'8路'  ,N'站D',4 UNION ALL
    SELECT N'8路'  ,N'站J',5 UNION ALL
    SELECT N'8路'  ,N'站L',6 UNION ALL
    SELECT N'8路'  ,N'站M',7 UNION ALL
    SELECT N'20路' ,N'站G',1 UNION ALL
    SELECT N'20路' ,N'站H',2 UNION ALL
    SELECT N'20路' ,N'站I',3 UNION ALL
    SELECT N'20路' ,N'站J',4 UNION ALL
    SELECT N'20路' ,N'站L',5 UNION ALL
    SELECT N'20路' ,N'站M',6 UNION ALL
    SELECT N'255路',N'站N',1 UNION ALL
    SELECT N'255路',N'站O',2 UNION ALL
    SELECT N'255路',N'站P',3 UNION ALL
    SELECT N'255路',N'站Q',4 UNION ALL
    SELECT N'255路',N'站J',5 UNION ALL
    SELECT N'255路',N'站D',6 UNION ALL
    SELECT N'255路',N'站E',7 UNION ALL
    SELECT N'255路',N'站F',8
    GO

    --乘车线路查询存储过程
    CREATE PROC p_qry
    @Station_Start nvarchar(10),
    @Station_Stop  nvarchar(10)
    AS
    SET NOCOUNT ON
    DECLARE @l int
    SET @l=0
    SELECT ID,Station,
     Line=CAST('('+RTRIM(ID)+': '+RTRIM(Station) as nvarchar(4000)),
     Orders=Orders,
     [Level]=@l
    INTO # FROM T_Line
    WHERE Station=@Station_Start
    WHILE @@ROWCOUNT>0
     AND NOT EXISTS(SELECT * FROM # WHERE Station=@Station_Stop)
    BEGIN
     SET @l=@l+1
     INSERT #(Line,ID,Station,Orders,[Level])
     SELECT
      Line=a.Line+CASE
       WHEN a.ID=b.ID THEN N'->'+RTRIM(b.Station)
       ELSE N') ∝ ('+RTRIM(b.ID)
        +N': '+RTRIM(b.Station) END,
      b.ID,b.Station,b.Orders,@l
     FROM # a,T_Line b
     WHERE a.[Level]=@l-1
      AND(a.Station=b.Station AND a.ID<>b.ID
       OR a.ID=b.ID AND(
        a.Orders=b.Orders+1
        OR
        a.Orders=b.Orders-1))
      AND LEN(a.Line)<4000
      AND PATINDEX('%[ >]'+b.Station+'[-)]%',a.Line)=0
    END
    SELECT N'起点站'=@Station_Start
     ,N'终点站'=@Station_Stop
     ,N'乘车线路'=Line+N')'
    FROM #
    WHERE [Level]=@l
     AND Station=@Station_Stop
    IF @@ROWCOUNT =0 --如果未有可以到达的线路,则显示处理结果表备查
     SELECT * FROM #
    GO

    --调用
    EXEC p_qry N'站A',N'站L'
    /*--结果
    起点站  终点站  乘车线路
    ---------- ------------ -----------------------------------------------------------
    站A    站L    (8路: 站A->站B->站C->站D->站J->站L)
    --*/

  • 相关阅读:
    第二章:JavaScript对象
    使用Java理解程序逻辑:第二章变量 数据类型和运算符
    项目里的方法
    js for循环和2中js方式样式
    Aptana 快捷键
    (转)ArcGIS Server 安全性与 Oracle 数据库相集成 Server图层权限分配
    WebForm_initCallback 未定义 错误(原)
    如何提高地图缓存性能 (转)
    进行arcgis js api开发需要了解的几个基本dojo语句
    ArcGIS的Compress、Compact、Analyze命令(转)
  • 原文地址:https://www.cnblogs.com/dushu/p/2531892.html
Copyright © 2011-2022 走看看