RSS
热门关键字:  数据挖掘  人工智能  数据仓库  搜索引擎  数据挖掘导论

SQL与最短路径算法

来源: 作者:unkonwn 时间:2004-11-22 点击:


/*
0:5/1:7/2:11
*/
点评:上面的方法的缺点是不能列出所有的路径,只能列出最短路径其中一条

数据挖掘研究院


5的列表中没有7,是不是可以认为5不认识7,那么5也不认识11,谈何5-11-7是最短路径?

--按照你说的逻辑,步骤如下

数据挖掘研究院

--1.建立查询函数
CREATE  FUNCTION dbo.F_RouteSearch
(
 @START INT,
 @END INT
)
RETURNS VARCHAR(200)
AS
BEGIN
DECLARE @NODE INT
DECLARE @COUNT INT
DECLARE @RESULT VARCHAR(100)
SET @COUNT=0
SET @RESULT=′′
DECLARE @TMP TABLE
(
ID INT,
F_ID VARCHAR(20),
STEP INT
)
INSERT INTO @TMP SELECT @START,(SELECT F_ID FROM LIST WHERE ID=@START),@COUNT
WHILE @END NOT IN (SELECT ID FROM @TMP)
BEGIN
SET @COUNT=@COUNT+1
INSERT INTO @TMP
SELECT DISTINCT a.ID,a.F_ID,@COUNT FROM List a,@TMP b WHERE CHARINDEX(′,′+RTRIM(a.ID)+′,′,′,′+b.F_ID+′,′)>0 and a.ID not in (SELECT ID FROM @TMP)
IF @@ROWCOUNT=0
BEGIN
SELECT @RESULT=′NO ROUTE FIND′
GOTO RETURNHANDLE
END
END
SELECT @RESULT=RTRIM(@COUNT)+′:′+RTRIM(@END)
WHILE @COUNT>1
BEGIN
SET @COUNT=@COUNT-1
SELECT TOP 1 @END=ID FROM @TMP WHERE STEP=@COUNT AND CHARINDEX(′,′+RTRIM(@END)+′,′,′,′+F_ID+′,′)>0 数据挖掘研究院
SELECT @RESULT=RTRIM(@COUNT)+′:′+RTRIM(@END)+′→′+@RESULT
END
SELECT @RESULT=′0:′+RTRIM(@START)+′→′+@RESULT
RETURNHANDLE:
RETURN @RESULT
END
GO

数据挖掘研究院

--准备测试数据(与LZ提供数据相同)
insert into list
select 5,′1,30,3′ union all
select 7,′9,5,8′ union all
select 10,′7,21,30′ union all
select 11,′7,5,30′ union all
select 21,′7,66,30′ union all
select 30,′21,88,99′
go
--测试

select dbo.F_RouteSearch(5,7) --从5开始,到7为止

上一篇:没有了
下一篇:求一个数据库备份方案
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
匿名?