t-sql最短路径搜索
SET STATISTICS IO ON;
SET STATISTICS TIME ON;
GO
IF OBJECT_ID(N'dbo.t1') IS NOT NULL
DROP TABLE dbo.t1;
GO
CREATE TABLE t1
(
id INT IDENTITY(1, 1)
PRIMARY KEY ,
a NVARCHAR(2) ,
b NVARCHAR(2)
);
--建立索引a
CREATE NONCLUSTERED INDEX [NonClusteredIndex-20190507-201219] ON [dbo].[t1]
(
[a] ASC
)
INCLUDE ( [b]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
GO
--建立索引b
CREATE NONCLUSTERED INDEX [NonClusteredIndex-20190507-201235] ON [dbo].[t1]
(
[b] ASC
)
INCLUDE ( [a]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
GO WITH cte_0 ( a, b )
AS ( SELECT 1 ,
2
UNION ALL
SELECT 1 ,
3
UNION ALL
SELECT 2 ,
4
UNION ALL
SELECT 2 ,
5
UNION ALL
SELECT 2 ,
3
UNION ALL
SELECT 3 ,
6
UNION ALL
SELECT 4 ,
9
UNION ALL
SELECT 5 ,
7
UNION ALL
SELECT 6 ,
9
UNION ALL
SELECT 7 ,
8
UNION ALL
SELECT 8 ,
10
UNION ALL
SELECT 9 ,
10
UNION ALL
SELECT 9 ,
12
UNION ALL
SELECT 10 ,
11
UNION ALL
SELECT 11 ,
12
)
INSERT INTO t1
( a ,
b
)
SELECT a ,
b
FROM cte_0
UNION ALL
SELECT b ,
a
FROM cte_0;
--加上是否循环的标记(效率较不加循环标记要高)
WITH cte_a
AS ( SELECT a ,
b
FROM dbo.t1
--UNION ALL
--SELECT b ,
-- a
--FROM dbo.t1
),
cte_b
AS ( SELECT a ,
b ,
0 AS isok ,
CAST(a + '>' + b AS NVARCHAR(MAX)) AS c_path ,
1 AS nlevel
FROM cte_a
WHERE a = ''--起点
UNION ALL
SELECT s.a ,
s.b ,
CASE WHEN s.b = '' THEN 1--如果下一层找到了终点,那么不需要继续向下找
ELSE 0
END AS isok ,
CAST(p.c_path + '>' + s.b AS NVARCHAR(MAX)) AS c_path ,
p.nlevel + 1
FROM cte_a AS s
INNER JOIN cte_b AS p ON p.b = s.a
WHERE CHARINDEX(s.b, p.c_path) = 0
AND p.isok = 0
),
cte_c
AS ( SELECT *
FROM cte_b
--WHERE b = '11'--终点
)
SELECT *
FROM cte_c
--WHERE cte_c.nlevel = ( SELECT MIN(cte_c.nlevel)
-- FROM cte_c
-- );
像个乞丐
t-sql最短路径搜索的更多相关文章
- 使用pgrouting进行最短路径搜索
PgRouting是基于开源空间数据库PostGIS用于网络分析的扩展模块,最初它被称作pgDijkstra,因为它只是利用Dijkstra算法实现最短路径搜索,之后慢慢添加了其他的路径分析算法 ...
- Java室内最短路径搜索(支持多楼层)
修改了上次的代码,现在支持室内的多楼层情况下的最短路径搜索,还是使用A*算法,把在GraphAdjList中VNode没有利用起来的data字段作为我们存储楼层属性的位置. 实际上是我偷懒了,正常情况 ...
- Python 图_系列之基于<链接表>实现无向图最短路径搜索
图的常用存储方式有 2 种: 邻接炬阵 链接表 邻接炬阵的优点和缺点都很明显.优点是简单.易理解,对于大部分图结构而言,都是稀疏的,使用炬阵存储空间浪费就较大. 链接表的存储相比较邻接炬阵,使用起来更 ...
- A*算法的原理 <转>
第一部分:A*算法简介 写这篇文章的初衷是应一个网友的要求,当然我也发现现在有关人工智能的中文站点实在太少,我在这里 抛砖引玉,希望大家都来热心的参与. 还是说正题,我先拿A*算法开刀, ...
- A*算法详解 BZOJ 1085骑士精神
转载1:A*算法入门 http://www.cppblog.com/mythit/archive/2009/04/19/80492.aspx 在看下面这篇文章之前,先介绍几个理论知识,有助于理解A*算 ...
- 深入了解A*
一.前言 在这里我将对A*算法的实际应用进行一定的探讨,并且举一个有关A*算法在最短路径搜索的例子.值得注意的是这里并不对A*的基本的概念作介绍,如果你还对A*算法不清楚的话,请看姊妹篇<初识A ...
- 【BZOJ】1085: [SCOI2005]骑士精神(A*启发式搜索)
http://www.lydsy.com/JudgeOnline/problem.php?id=1085 囧啊囧,看了题解后写了个程序,但是样例总过不了T+T,调试了不下于1个小时,肉眼对拍看了根本看 ...
- 单源最短路径——Dijkstra算法学习
每次都以为自己理解了Dijkstra这个算法,但是过没多久又忘记了,这应该是第4.5次重温这个算法了. 这次是看的胡鹏的<地理信息系统>,看完之后突然意识到用数学公式表示算法流程是如此的好 ...
- PAT 1003
1003. Emergency (25) As an emergency rescue team leader of a city, you are given a special map of yo ...
随机推荐
- python-获取程序的路径
python获取当前路径 import os,sys 使用sys.path[0].sys.argv[0].os.getcwd().os.path.abspath(file).os.path.realp ...
- [题解] [AHOI2009] 跳棋
题面 题解 分类讨论, 考虑到只要所有的偶数点上都有棋子, 最左边的棋子就可以跳到最右边 题目第一问让我们求最少的在白格子上必须放的棋子数(不用考虑行动中放的棋子数) 考虑到这几种情况 有不少于两个红 ...
- 「JOI 2019 Final」 硬币收藏
题目链接 戳我 \(Solution\) 先将所有棋子移动到最近的目标点上 我们设两个变量\(ans1,ans2\)表示到目前为止这个点上可以移动棋子的数目,然后\(f[i][j]\)表示\((i,j ...
- LeetCode---Bit Manipulation && Design
**401. Binary Watch 思路:产生两个list分别代表小时和分钟,然后遍历 public List<String> readBinaryWatch(int num) { L ...
- Linux 相关系统日志查看
1. 登录日志 cat /var/log/secure 涉及到账号登录的日志信息都会记录在此文件中. 2. Unit 的启动日志 journalctl 可以查看所有 unit 的启动日志,日志的配置文 ...
- EBS GL 日记账行“账户说明”段说明显示不全
问题描述: 路径:总帐管理超级用户/日记帐/输入 如下图所示,日记账行的“账户说明字段”段值说明显示不全 解决方法: 路径:总帐管理超级用户/设置/财务系统/弹性域/关键字/段 如下图所示,找到相应的 ...
- koa 基础(十二)koa-static 静态资源中间件 静态web服务
1.目录 2.app.js /** * koa-static 静态资源中间件 静态web服务 * 1.npm install --save koa-static * 2.const static = ...
- drawable SVG 使用
Android会使用一些规则来去帮我们匹配最适合的图片.什么叫最适合的图片?比如我的手机屏幕密度是xxhdpi,那么drawable-xxhdpi文件夹下的图片就是最适合的图片.因此,当我引用andr ...
- java二进制工具
可以运用jdk工具监控java应用性能,再配合 jmeter 进行了一个长时间的加压,在加压过程中重点关注了系统资源的使用情况 D:\Program Files (x86)\Java\jdk1.8.0 ...
- javascript之Screen(屏幕)对象
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
