我有一个简单的加权图
A
1 / \\ 0.5
/ \\0.5
B C
假设这描述了一个家庭,A 是父亲,B 是儿子,C 是母亲。假设 B 在大学读书,A 为他买了一套公寓。A和C住在共同拥有的房子里,50-50。
我想将图形转换为一棵树,从 A: 即开始。
- A拥有C居住地50%的股份
- A 拥有 B 居住地的 100%
- C拥有A居住地50%的股份
图表和生成的树可能更精细,但我希望你能得到更一般的画面。
在 SQL Server 2005 上,我有
Drop Table #graph;
Create Table #graph
(FirstVertex VarChar(1) Not Null,
SecondVertex VarChar(1) Not Null,
Weight float);
Insert #graph Values('A','B',1);
Insert #graph Values('A','C',0.5);
Insert #graph Values('C','A',0.5);
我正在使用以下公用表表达式来遍历图形,从“A”开始:
With GraphRecursion (FirstVertex, SecondVertex, Weight, Level)
As
(
Select FirstVertex, SecondVertex, Weight, 0 As Level
From #graph
Where FirstVertex='A'
Union all
Select a.FirstVertex, a.SecondVertex, a.Weight, b.Level+1
From #graph a
Inner Join GraphRecursion b
On a.FirstVertex=b.SecondVertex --And b.Level<=1
)
Select * From GraphRecursion;
这引起
Msg 530, Level 16, State 1, Line 11
The statement terminated. The maximum recursion 100 has
been exhausted before statement completion.
通过取消注释来限制递归级别会And b.Level<=1
给出预期的结果,但这显然对任何实际用途都不是很有用。
有没有办法引用以前的迭代,以便在上面的示例边缘(即 FirstVertex、SecondVertex 对)中不会重复?