使用SQL在有向图中查找循环

时间:2009-09-09 07:13:06

标签: sql algorithm graph

关于查找周期已有几个问题,但我没有在SQL中找到解决方案(MSSQL首选)。

表格是Node(NodeID INT)和Edge(EdgeID INT,NodeID1 INT,NodeID2 INT)

在有向图中找到循环的效果如何?

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

您无法在纯SQL中执行此操作。在您的查询中,JOIN的数量总是有限的。你有多大的JOIN数量,你总是可以构造一个包含更多边缘的循环,证明查询不健全。

所以你应该使用某种循环,在某些SQL方言中实现,或者在perl或ruby中实现。

答案 2 :(得分:1)

解决方案非常简单明了,但有点长:

首先生成通过图表的所有路径的列表,这样任何路径都不会多次包含相同的边缘。

根据这些信息,我们获取在同一节点中开始和结束的路径列表。

从这个“最终”边缘列表中,我们根据前两个步骤的计算重建所有具有周期的路径。

我在我的博客上发布了complete solution in TSQL