Re: transitive closure of a graph

From: Mikito Harakiri <mikharakiri_nospaum_at_yahoo.com>
Date: 11 Oct 2005 19:11:35 -0700
Message-ID: <1129083095.324985.273800_at_f14g2000cwb.googlegroups.com>


Mikito Harakiri wrote:
> Transitive closure (TC) of a graph is
>
> with TransClosedEdges (tail, head) as
> ( select tail, head from Edges
> union all
> select e.tail, ee.head from Edges e, TransClosedEdges ee
> where e.head = ee.tail
> )
> select distinct * from TransClosedEdges
>
> except that this query might never terminate.

Oops, it's actually quite obvious

with TransClosedEdges (tail, head) as
( select tail, head from Edges
  where tail <> head --*******
  union all
  select e.tail, ee.head from Edges e, TransClosedEdges ee   where e.head = ee.tail
  and e.tail <> ee.head --*******

)
select distinct * from TransClosedEdges

Graeme handles more general case, hence the complication. Received on Wed Oct 12 2005 - 04:11:35 CEST

Original text of this message