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)
    --*/

  • 相关阅读:
    订单号设计
    小公司的技术架构原则
    Redis配置详解
    实现图片懒加载
    Js的GC机制
    防抖与节流
    Js中的堆栈
    浏览器窗口间通信
    块级格式化上下文
    实现瀑布流布局
  • 原文地址:https://www.cnblogs.com/dushu/p/2531892.html
Copyright © 2011-2022 走看看